1. 程式人生 > >【開發工具】JAVA效能分析:3、超詳細的JProfiler快照分析(官方中文版)

【開發工具】JAVA效能分析:3、超詳細的JProfiler快照分析(官方中文版)

Snapshots——快照分析

到目前為止,我們只查看了JProfiler GUI從配置檔案JVM中執行的效能分析代理獲取資料的實時會話。JProfiler還支援將所有分析資料寫入檔案的快照。在以下幾種情況下,這可能是有利的:

  • 您可以自動記錄分析資料,例如作為測試的一部分,以便無法連線JProfiler GUI。
  • 您希望比較來自不同分析會話的分析資料或檢視較舊的記錄。
  • 您想與其他人共享分析資料。

快照包括來自所有記錄的資料,包括堆快照。為了節省磁碟空間,快照被壓縮,但堆walker資料除外,它必須保持未壓縮狀態以允許直接記憶體對映。

一、Saving and opening snapshots in the JProfiler GUI

在分析實時會話時,可以使用“ 儲存快照”工具欄按鈕建立快照。JProfiler從遠端代理中提取所有分析資料,並將其儲存到副檔名為“.jps”的本地檔案中。您可以在實時會話過程中儲存多個此類快照。它們不會自動開啟,您可以繼續進行配置。

儲存的快照會自動新增到“ 檔案” - >“最近快照”選單中,以便您可以方便地開啟剛剛儲存的快照。在實時會話仍在執行時開啟快照時,您可以選擇終止實時會話或開啟另一個JProfiler視窗。

在JProfiler中使用快照比較功能時,將使用為當前實時會話儲存的所有快照填充快照列表。這樣可以輕鬆比較不同的用例。

通常,您可以通過從主選單呼叫Session-> Open Snapshot

或雙擊檔案管理器中的快照檔案來開啟快照。JProfiler的IDE整合還支援通過IDE本身的通用Open File操作開啟JProfiler快照。在這種情況下,您將原始碼導航到IDE而不是內建的原始碼檢視器。

開啟快照時,將禁用所有記錄操作,並且只有具有記錄資料的檢視可用。要發現記錄的資料型別,請將滑鼠懸停在狀態列中的記錄標籤上。

二、Profiling short-lived programs

對於實時會話,所有分析資料都駐留在已分析的JVM的過程中。因此,當配置的JVM終止時,JProfiler中的配置檔案會話也將關閉。要在JVM退出時繼續進行效能分析,您有兩個選項,可以在會話啟動對話方塊中啟用這兩個選項。

  • 只要連線了JProfiler GUI,您就可以阻止JVM實際退出並將其人為地保持活動狀態。當您從IDE分析測試用例並希望在IDE的測試控制檯中檢視狀態和總時間時,這可能是不合需要的。
  • 您可以要求JProfiler在JVM終止時儲存快照並立即切換到它。快照是臨時的,在關閉會話時將被丟棄,除非您首先使用“ 儲存快照”操作。

三、Saving snapshots with triggers

自動分析會話的最終結果始終是快照或一系列快照。在觸發器中,您可以新增“儲存快照”操作,該操作將快照儲存在執行已配置的JVM的計算機上。當觸發器在實時會話期間執行時,快照也會儲存在遠端計算機上,並且可能不包括已傳輸到JProfiler GUI的部分資料。

使用觸發器儲存快照有兩種基本策略:

  • 對於測試用例,請在“JVM startup”觸發器中開始記錄,並新增“JVM exit”觸發器以在JVM終止時儲存快照。
  • 對於“CPU負載閾值”觸發器或帶有“定時器觸發器”的定期分析等特殊情況,請在記錄一些資料後儲存快照,並在其間執行“休眠”操作。

四、HPROF堆快照

在捕獲堆快照產生過多開銷或消耗太多記憶體的情況下,您可以使用JVM提供的HPROF堆快照作為內建功能。由於此操作不需要效能分析代理,因此分析生產中執行的JVM中的記憶體問題非常有用。

使用JProfiler,有三種方法可以獲得這樣的快照:

  • 對於實時會話,JProfiler GUI在主選單中提供了一個操作來觸發HPROF堆轉儲。

JProfiler有一個特殊的“Out of memory exception”觸發器,用於OutOfMemoryError在丟擲時儲存HPROF快照 。這對應於 VM引數

-XX:+ HeapDumpOnOutOfMemoryError

HotSpot JVM支援。

JDK中 的jmap可執行檔案 可用於從正在執行的JVM中提取HPROF堆轉儲。

JProfiler包含jpdump比jmap更通用的命令列工具。它允許您選擇一個程序,可以連線到在Windows上作為服務執行的程序,對混合的32位/ 64位JVM沒有問題,並自動編號HPROF快照檔案。使用該-help 選項執行它以獲取更多資訊。