JVM監控工具之jprofile
一、簡介
JProfiler是一款Java的效能監控工具。可以檢視當前應用的物件、物件引用、記憶體、CPU使用情況,執行緒執行情況(阻塞、等待等),同時可以查詢哪個物件佔用的記憶體比較多、哪個物件佔用CPU處理的時間比較多
二、配置
通過JProfiler遠端連線伺服器監控JVM,需要在被監控的伺服器上tomcat的啟動檔案catalina.sh中加入以下配置:
JAVA_OPTS="-agentpath:/usr/local/jprofiler7/bin/linux-x86/libjprofilerti.so=port=8849,nowait"
其中:/usr/local/jprofilter7為Linux伺服器上JProfilter的安裝路徑
linux-x86代表Linux作業系統是32位的,如果是64位的則要寫linux-x64
nowait代表不需要連上JProfilter也能夠啟動Linux伺服器上的tomcat,否則只有等window客戶端連上以後才能啟動直到超時
三、功能介紹
1、記憶體剖析 Memory Views
JProfiler 的記憶體檢視部分可以提供動態的記憶體使用狀況更新檢視和顯示關於記憶體分配狀況資訊的檢視。所有的檢視都有幾個聚集層並且能夠顯示現有存在的物件和作為垃圾回收的物件。
-
所有物件 All Objects
顯示類或在狀況統計和尺碼資訊堆上所有物件的包。你可以標記當前值並顯示差異值。 -
記錄物件 Record Objects
顯示類或所有已記錄物件的包。你可以標記出當前值並且顯示差異值。 -
分配訪問樹 Allocation call tree
顯示一棵請求樹或者方法、類、包或對已選擇類有帶註釋的分配資訊的J2EE元件。 -
分配熱點 Allocation hot spots
顯示一個列表,包括方法、類、包或分配已選類的J2EE元件。你可以標註當前值並且顯示差異值。對於每個熱點都可以顯示它的跟蹤記錄樹。
2、堆遍歷 Heap Walker
在JProfiler的堆遍歷器(Heap walker)中,你可以對堆的狀況進行快照並且可以通過選擇步驟下尋找感興趣的物件。堆遍歷器有五個檢視:
-
類 Classes
顯示所有類和它們的例項。 -
分配 Allocations
為所有記錄物件顯示分配樹和分配熱點。 -
索引 References
為單個物件和“顯示到垃圾回收根目錄的路徑”提供索引圖的顯示功能。還能提供合併輸入檢視和輸出檢視的功能。 -
資料 Data
為單個物件顯示例項和類資料。 -
時間 Time
顯示一個對已記錄物件的解決時間的柱狀圖。
3、CPU 剖析 CPU Views
JProfiler 提供不同的方法來記錄訪問樹以優化效能和細節。執行緒或者執行緒組以及執行緒狀況可以被所有的檢視選擇。所有的檢視都可以聚集到方法、類、包或J2EE元件等不同層上。CPU檢視部分包括:
-
訪問樹 Call tree
顯示一個積累的自頂向下的樹,樹中包含所有在JVM中已記錄的訪問佇列。JDBC,JMS和JNDI服務請求都被註釋在請求樹中。請求樹可以根據Servlet和JSP對URL的不同需要進行拆分。 -
熱點 Hot spots
顯示消耗時間最多的方法的列表。對每個熱點都能夠顯示回溯樹。該熱點可以按照方法請求,JDBC,JMS和JNDI服務請求以及按照URL請求來進行計算。 -
訪問圖 Call graph
顯示一個從已選方法、類、包或J2EE元件開始的訪問佇列的圖。
4、執行緒剖析 Thread Views
對執行緒剖析,JProfiler提供以下檢視:
-
執行緒歷史 Thread history
顯示一個與執行緒活動和執行緒狀態在一起的活動時間表。 -
執行緒監控 Thread monitor
顯示一個列表,包括所有的活動執行緒以及它們目前的活動狀況。 -
死鎖探測圖表 Deadlock Detection
顯示一個包含了所有在JVM裡的死鎖圖表。 -
目前使用的監測器 Current monitor useage
顯示目前使用的監測器並且包括它們的關聯執行緒。 -
歷史檢測記錄 History usage history
顯示重大的等待事件和阻塞事件的歷史記錄。 -
監測使用狀態 Monitor usage statistics
顯示分組監測,執行緒和監測類的統計監測資料。
5、VM 遙感勘測技術 VM Telemetry Views
觀察JVM的內部狀態,JProfiler提供了不同的遙感勘測檢視
-
堆 Heap
顯示一個堆的使用狀況和堆尺寸大小活動時間表。 -
記錄的物件 Recorded objects
顯示一張關於活動物件與陣列的圖表的活動時間表。 -
垃圾回收 Garbage collector
顯示一張關於垃圾回收活動的活動時間表。 -
類 Classes
顯示一個與已裝載類的圖表的活動時間表。 -
執行緒 Threads
顯示一個與動態執行緒圖表的活動時間表。