JProfiler入門使用教程—Eclipse整合
3.1 直觀認識
這麼強大的一個工具,怎樣效能監控呢?這個課題太大,我們把範圍縮小一點,如何入門呢?偶然在CSDN上找到一位blogger的博文,裡面的“實戰”例子絕對可以讓你對效能監控有一個直觀的認識。
幾分鐘很快就過去了,讓我們做以下幾個總結:
1. 在Memory Views視圖裡右擊相關類,選中Mark Current Values可以標記當前值,方便後續進行比較,注意綠色和紅色之分;
標記完之後,通過GUI介面可以很方便的看出值的變化情況
2. 按F4或者點選窗體上面的綠色圖示Run GC可以通知JVM進行垃圾回收的動作(只是通知,不是強制回收);
3. 在Memory Views視圖裡右擊相關類,點選Show Selection In Heap Walker可以進行堆記憶體跟蹤;
4. 在Heap Walker檢視中右擊相關類,點選Used Selected Instances→Allocation Tree可以看到關於該類的呼叫細節和記憶體使用情況。
Allocation tree看的是呼叫樹,你也可以根據需要選擇其他選項。
3.2 模組介紹
模組的介紹主要是對JProfiler的具體功能進行介紹,部分內容參照自部落格:JProfiler 解決 Java 伺服器的效能跟蹤,如果讀者英文閱讀能力比較強也可以在工具欄上邊點選Help,直接閱讀英文幫助,下文部分內容亦是參照自英文API。
3.2.1 記憶體檢視 Memory Views
JProfiler的記憶體檢視部分可以提供動態的記憶體使用狀況更新檢視和顯示關於記憶體分配狀況資訊的檢視。所有的檢視都有幾個聚集層並且能夠顯示現有存在的物件和作為垃圾回收的物件。
- 所有物件 All Objects
顯示類或在狀況統計和尺碼資訊堆上所有物件的包。你可以標記當前值並顯示差異值。 - 記錄物件 Record Objects
顯示類或所有已記錄物件的包。你可以標記出當前值並且顯示差異值。 - 分配訪問樹 Allocation Call Tree
顯示一棵請求樹或者方法、類、包或對已選擇類有帶註釋的分配資訊的J2EE元件。 - 分配熱點 Allocation Hot Spots
顯示一個列表,包括方法、類、包或分配已選類的J2EE元件。你可以標註當前值並且顯示差異值。對於每個熱點都可以顯示它的跟蹤記錄樹。 - 類追蹤器 Class Tracker
類跟蹤檢視可以包含任意數量的圖表,顯示選定的類和包的例項與時間。
3.2.2 堆遍歷 Heap Walker
在JProfiler的堆遍歷器(Heap Walker)中,你可以對堆的狀況進行快照並且可以通過選擇步驟下尋找感興趣的物件。堆遍歷器有五個檢視:
- 類 Classes
顯示所有類和它們的例項,可以右擊具體的類"Used Selected Instance"實現進一步跟蹤。 - 分配 Allocations
為所有記錄物件顯示分配樹和分配熱點。 - 索引 References
為單個物件和“顯示到垃圾回收根目錄的路徑”提供索引圖的顯示功能。還能提供合併輸入檢視和輸出檢視的功能。 - 時間 Time
顯示一個對已記錄物件的解決時間的柱狀圖。 - 檢查 Inspections
顯示了一個數量的操作,將分析當前物件集在某種條件下的子集,實質是一個篩選的過程。 - 圖表 Graph
你需要在references檢視和biggest檢視手動新增物件到圖表,它可以顯示物件的傳入和傳出引用,能方便的找到垃圾收集器根源。
tips:在工具欄點選"Go To Start"可以使堆記憶體重新計數,也就是回到初始狀態。
3.2.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元件開始的訪問佇列的圖。 - 方法統計 Method Statistis
顯示一段時間內記錄的方法的呼叫時間細節。
3.2.4 執行緒檢視 Thread Views
JProfiler通過對執行緒歷史的監控判斷其執行狀態,並監控是否有執行緒阻塞產生,還能將一個執行緒所管理的方法以樹狀形式呈現。對執行緒剖析,JProfiler提供以下檢視:
- 執行緒歷史 Thread History
顯示一個與執行緒活動和執行緒狀態在一起的活動時間表。 - 執行緒監控 Thread Monitor
顯示一個列表,包括所有的活動執行緒以及它們目前的活動狀況。 - 執行緒轉儲 Thread Dumps
顯示所有執行緒的堆疊跟蹤。
3.2.5 監控器檢視 Monitor Views
JProfiler提供了不同的監控器檢視,如下所示:
- 當前鎖定圖表 Current Locking Graph
顯示JVM中的當前鎖定情況。 - 當前監視器 Current Monitors
顯示當前正在等待或阻塞中的執行緒操作。 - 鎖定歷史圖表 Locking History Graph
顯示記錄在JVM中的鎖定歷史。 - 監控器歷史 Monitor History
顯示等待或者阻塞的歷史。 - 監控器使用統計 Monitor Usage Statistics
計算統計監控器監控的資料。
3.2.6 VM遙感勘測技術檢視 VM Telemetry Views
觀察JVM的內部狀態,JProfiler提供了不同的遙感勘測檢視,如下所示:
- 記憶體 Memory
顯示堆疊的使用狀況和堆疊尺寸大小活動時間表。 - 記錄的物件 Recorded Objects
顯示一張關於活動物件與陣列的圖表的活動時間表。 - 記錄的生產量 Recorded Throughput
顯示一段時間累計的JVM生產和釋放的活動時間表。 - 垃圾回收活動 GC Activity
顯示一張關於垃圾回收活動的活動時間表。 - 類 Classes
顯示一個與已裝載類的圖表的活動時間表。 - 執行緒 Threads
顯示一個與動態執行緒圖表的活動時間表。 - CPU負載 CPU Load
顯示一段時間中CPU的負載圖表。
3.3 使用心得
3.3.1 看記憶體圖
Key 1,把目光集中到上圖的藍色部分,可以發現每次記憶體上升到一個峰值之後便會下跌,這個動作其實就是GC在回收記憶體,並且上升和回收的幅度大抵相同,如果你發現記憶體圖中可用記憶體隨著時間的流逝一直在上升而沒有GC回收的動作,那麼你就要懷疑它是否存在著記憶體洩露了;
Key 2,當你懷疑記憶體洩露時,可以在Memory Views檢視Mark Current Values,然後在一段時間後F4,找出那個沒有被釋放掉的異常類對其進行深一步的追蹤;
Key 3,追蹤主要使用Heap Walker的各項功能,各功能具體能做何種分析請複習章節3.1直觀認識和3.2.2 堆遍歷 Heap Walker。