Jprofiler解決java服務器的性能跟蹤

JProfiler 解決 Java 服務器的性能跟蹤 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


 


作者:徐建祥([email protected]


時間: <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2006/01/05


來自:http://www.anymobile.org
 


1、摘要..........................................................................1
2、改善服務器的性能...........................................................1
3、分析器原理...................................................................2
4、JProfiler 簡介...............................................................2
5、JProfiler 特徵...............................................................3
6、本地監控.....................................................................4
7、遠程監控.....................................................................7
8、參考..........................................................................9



 


1 摘要


       改善 Java 服務器的性能需要模擬負載下的服務器。創建一個模擬環境、蒐集數據並且分析結果可能是對許多開發人員的挑戰。這篇文章介紹了使用 JProfiler 跟蹤分析 Java 服務器的性能。


 


簡單的性能問題很容易分離並解決,然而,大的性能問題,如內存溢出或者系統的罷工,通常在系統處於高負載情況下發生,就不能這麼簡單的處理了。這些問題需要一個獨立的測試環境、一個模擬的負載,並且需要仔細地分析和跟蹤。


 


在這篇文章中,我使用比較通用的工具( JProfiler JBuilder )和設備創建了一個性能監控分析環境,跟蹤本地和遠程的服務器程序,專注於三個性能問題:內存、垃圾回收和多線程運行狀況,從而很好的監視 JVM 運行情況及其性能。


2 、改善服務器的性能


服務器的性能改善是依賴於數據的。沒有可靠的數據基礎而更改應用或環境會導致更差的結果。分析器提供有用的 Java 服務器應用信息,但由於從單用戶負載下的數據與多用戶負載下得到的數據是完全不同的,這導致分析器的數據並不精確。在開發階段使用分析器來優化應用的性能是一個好的方式,但在高負載下的應用分析可以取到更好的效果。


 


在負載下分析服務器應用的性能需要一些基本的元素:


 


1、  可控的進行應用負載測試的環境。


2、  可控的人造負載使得應用滿負荷運行。


3、  來自監視器、應用和負載測試工具自身的數據蒐集。


4、  性能改變的跟蹤。


 


不要低估最後一個需求(性能跟蹤)的重要性因爲如果不能跟蹤性能你就不能實際的管理項目。性能上 10-20% 的改善對單用戶環境來說並沒有什麼不同,但對支持人員來說就不一樣了。 20% 的改善是非常大的,而且通過跟蹤性能的改善,你可以提供重要的反饋和持續跟蹤。


 


雖然性能跟蹤很重要,但有時爲了使後續的測試更加精確而不得不拋棄先前的測試結果。在性能測試中,改善負載測試的精確性可能需要修改模擬環境,而這些變化是必須的,通過變化前後的負載測試你可以觀察到其中的轉變。


3 分析器原理


現在幾乎所有的分析器都是從同一個起點和約束開始的: Java 虛擬機分析器界面 (JVMPI) ( 參考 "The Java Virtual Machine Profiler Interface") Sun 微系統的 API 允許工具開發商接口或者連接到遵循 JVMPI JVM 上,並且監控運作的方式以及 JVM 運行任何 Java 程序時的關鍵事件 -- 從單獨的應用程序到 Applet Servlet 和企業 JavaBeans (EJB) 組件。


在分析器內啓動一個程序意味着生成、捕捉、和觀察大量數據,所以所有的分析器都包含着不同的方法來控制數據的流動,在不同的標準以及每一封裝包的基礎上進行過濾。同樣 也可以使用靈活的正規表達式類型模式來完成。


4 JProfiler 簡介


r_jp002.gif是一個全功能的 Java 剖析工具( profiler ),專用於分析 J2SE J2EE 應用程序。它把 CPU 、執行緒和內存的剖析組合在一個強大的 應用中。 JProfiler 可提供許多 IDE 整合和應用服務器整合用途。 JProfiler 直覺式的 GUI 讓你可以找到效能瓶頸、抓出內存漏失 (memory leaks) 、並解決執行緒的問題。它讓你得以對 heap walker 作資源回收器的 root analysis ,可以輕易找出內存溢出; heap 快照( snapshot )模式讓未被參照( reference )的對象、稍微被參照的對象、或在終結( finalization )隊列的對象 都會被移除;整合精靈以便剖析瀏覽器的 Java 外掛功能。


 


目前最新的版本是 4.1.2 ,幾乎支持所有常用的 IDE Application Server ,可以到其 EJ 官方網站 http://www.ej-technologies.com/ 下載,申請一個十天的試用註冊碼。


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />5 JProfiler 特徵


5.1 內存剖析 Memory profiler


JProfiler 的內存視圖部分可以提供動態的內存使用狀況更新視圖和顯示關於內存分配狀況信息的視圖。所有的視圖都有幾個聚集層並且能夠顯示現有存在的對象和作爲垃圾回收的對象。



  • 所有對象
    顯示類或在狀況統計和尺碼信息堆上所有對象的包。你可以標記當前值並顯示差異值。


  • 記錄對象 Record objects
    顯示類或所有已記錄對象的包。你可以標記出當前值並且顯示差異值。


  • 分配訪問樹 Allocation call tree
    顯示一棵請求樹或者方法、類、包或對已選擇類有帶註釋的分配信息的J2EE組件。


  • 分配熱點 Allocation hot spots
    顯示一個列表,包括方法、類、包或分配已選類的J2EE組件。你可以標註當前值並且顯示差異值。對於每個熱點都可以顯示它的跟蹤記錄樹。


5.2 堆遍歷 Heap walker


JProfiler的堆遍歷器(Heap walker)中,你可以對堆的狀況進行快照並且可以通過選擇步驟下尋找感興趣的對象。堆遍歷器有五個視圖:



  • Classes
    顯示所有類和它們的實例。


  • 分配 Allocations
    爲所有記錄對象顯示分配樹和分配熱點。


  • 索引 References
    爲單個對象和顯示到垃圾回收根目錄的路徑提供索引圖的顯示功能。還能提供合併輸入視圖和輸出視圖的功能。


  • 數據 Data
    爲單個對象顯示實例和類數據。


  • 時間 Time
    顯示一個對已記錄對象的解決時間的柱狀圖。


5.3 CPU 剖析 CPU profiler


JProfiler 提供不同的方法來記錄訪問樹以優化性能和細節。線程或者線程組以及線程狀況可以被所有的視圖選擇。所有的視圖都可以聚集到方法、類、包或J2EE組件等不同層上。CPU視圖部分包括:



  • 訪問樹 Call tree
    顯示一個積累的自頂向下的樹,樹中包含所有在JVM中已記錄的訪問隊列。JDBC,JMSJNDI服務請求都被註釋在請求樹中。請求樹可以根據ServletJSPURL的不同需要進行拆分。


  • 熱點 Hot spots
    顯示消耗時間最多的方法的列表。對每個熱點都能夠顯示回溯樹。該熱點可以按照方法請求,JDBCJMSJNDI服務請求以及按照URL請求來進行計算。


  • 訪問圖 Call graph
    顯示一個從已選方法、類、包或J2EE組件開始的訪問隊列的圖。


5.4 線程剖析 Thread profiler


對線程剖析,JProfiler提供以下視圖:



  • 線程歷史 Thread history
    顯示一個與線程活動和線程狀態在一起的活動時間表。


  • 線程監控 Thread monitor
    顯示一個列表,包括所有的活動線程以及它們目前的活動狀況。


  • 死鎖探測圖表 Deadlock Detection
    顯示一個包含了所有在JVM裏的死鎖圖表。


  • 目前使用的監測器 Current monitor useage
    顯示目前使用的監測器並且包括它們的關聯線程。


  • 歷史檢測記錄 History usage history
    顯示重大的等待事件和阻塞事件的歷史記錄。


  • 監測使用狀態 Monitor usage statistics
    顯示分組監測,線程和監測類的統計監測數據。


5.5 VM 遙感勘測技術 VM telemetry


觀察JVM的內部狀態,JProfiler提供了不同的遙感勘測視圖,如下所示:



  • Heap
    顯示一個堆的使用狀況和堆尺寸大小活動時間表。


  • 記錄的對象 Recorded objects
    顯示一張關於活動對象與數組的圖表的活動時間表。


  • 垃圾回收 Garbage collector
    顯示一張關於垃圾回收活動的活動時間表。


  • Classes
    顯示一個與已裝載類的圖表的活動時間表。


  • 線程 Threads
    顯示一個與動態線程圖表的活動時間表。


6 本地監控


系統環境 Windows OS ;軟件 JBuilderX/2005 JProfiler 4.1.2


 


1 、安裝 JBuilderX JProfiler 4.1.2


2 、運行 JProfiler Session-> IDE integration tab, IDE 選擇Borland JBuilder7 to 2005,點擊Integrate按鈕,選擇JBuilder的安裝目錄,確認,會看到已經將JProfilerOpenTool的形式,成功整合到JBuilder中,見下圖。


 



r_jp003.png 



3
、運行 JBuilder ,打開 Run->Configurations ,選擇或新建一個 Runtime ,在 Optimize 選項中就可以看到 JProfiler ,可以選擇每次運行程序新建一個 JProfiler 窗口的提示設置。


4 、點擊 Optimize Project 按鈕,運行程序。




r_jp004.png

5
、彈出如下的 JProfiler 窗口,確認相關的信息即可。




r_jp005.png

6
、至此,就可以監控本地服務器的各個方面的性能了。
r_jp006.png

r_jp007.png

r_jp009.png

r_jp010.png





7 遠程監控


服務器程序一般運行在遠程的服務器設備上,有時候我們還需要遠程監控商用的服務器資源。


 


服務器操作系統 Linux OS ,安裝步驟如下:
1、./jprofiler_linux_4_1_2.sh,出現如下提示:
testing JVM in /usr/jdk1.4 ...
Starting Installer ...
注:對於沒有安裝X Server的機器,需要執行./jprofiler_linux_4_1_2.sh -q,否則會提示,
testing JVM in /usr/jdk1.4 ...
Starting Installer ...
This installer needs access to an X Server.
If this is not possible, you can run the installer in unattended mode
by passing the argument -q to the installer.
2、安裝完畢後,會在/opt目錄下,找到jprofiler的安裝目錄,/opt/jprofiler4。

本地操作系統
WindowXP ,相關的配置如下:


 


1 、本地安裝 JProfiler Linux 服務器上也安裝 JProfiler (只有本地 / 監控者的需要輸入序列號)。


2 、打開本地的 JProfiler session->Integration wizards-> New Remote integration


3 、選擇 on a remote computer platform 選擇 linux x86/AMD64 ,點擊 next


4 、輸入遠程 ip 地址,點擊 next


5 、輸入遠程 JProfiler 的安裝目錄,默認都安裝在 /opt/jprofiler4 下,一路NEXT


6 、出現下面提示框,按照要求配置下服務器的設置,界面如下:



r_jp008.png
Java
執行語句中加入下列運行參數


 -Xint -Xrunjprofiler:port=8849 -Xbootclasspath/a:/opt/jprofiler4/bin/agent.jar


/etc/profile 中加入 export LD_LIBRARY_PATH=/opt/jprofiler4/bin/linux-x86 ,退出、重新登陸。


 



7 、好了,全部配置完畢,先運行遠程服務器程序,再打開本地的 JProfiler 程序,握手成功後,遠程程序正常運行了。


 


服務器信息如下:


[root@ns 55556]# tail -f nohup.out


JProfiler> Protocol version 21


JProfiler> Using JVMPI


JProfiler> 32-bit library


JProfiler> Listening on port: 8849.


JProfiler> Native library initialized


JProfiler> Waiting for a connection from the JProfiler GUI ...


// 以上爲本地 JProfiler 連上前的系統提示


JProfiler> Using dynamic instrumentation


JProfiler> Time measurement: elapsed time


JProfiler> CPU profiling enabled


JProfiler> Starting org/anymobile/server/cmwap/CmwapServer ...


 


2005/12/15 17:05:46 [ INFO] - Starting Cmwap Stand Server ...
2005/12/15 17:05:47 [ INFO] - HandleThread runing ......


 




8 、補充說明及參考


8.1 補充說明


 


如果你希望動態保存當前 Session 的運行數據的快照,點擊 JProfiler 的保存按鈕即可;


可以通過 JProfiler Start Center Open snapshot tab 打開保存的 Session


你也可以右鍵點擊某個視圖,靜態保存到 HTML 文件,文字描述加視圖圖片;


有一些視圖的數據只會運行一次,不會動態的刷新,如內存視圖中的分配訪問樹等視圖;


WinXP JProfiler 似乎不支持中文, 2K 下支持的,上面有一些圖片是在 2K 系統上截取的;


另外, JProfiler 還可以監控某個 Application Server Applet ,功能非常強大,可以參考軟件自帶的 Help


 


8.2 參考


 


JProfiler Tutorials              http://www.ej-technologies.com/products/jprofiler/tutorials.html


What's new in JProfiler     http://www.ej-technologies.com/products/jprofiler/whatsnew41.html


JProfiler help                        http://resources.ej-technologies.com/jprofiler/help/doc/


Java Virtual Machine Profiler Interface  http://java.sun.com/j2se/1.3/docs/guide/jvmpi/index.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章