JProfiler效能分析工具詳解
1.簡介
JProfiler 是一個商業授權的Java剖析工具,用於分析Java EE和Java SE應用程式.
2.JVMTI
JDK 本身定義了目標明確並功能完善的JNI( Java Native Interface ) 與虛擬機器直接進行互動,這些 API 能很方便的進行擴充套件,從而滿足開發者各式的需求.
JVMTI( JVM Tool Interface) ,是JAVA虛擬機器提供的本地介面,它是實現排程器以及其它Java執行測試與分析工具的基礎.
* 並不一定在所有的JDK提供商都有實現,但在主流的Oracle JDK、Open JDK上都有其實現.
* 在開發的過程中一般是使用Agent的方式來使用JVMTI,通過呼叫JVMTI的函式,從JVM中得到當前的執行資訊.
3.JProfiler內部模型
4.JProfiler資料採集的原理
1.使用者在JProfiler GUI中下達監控命令( 對應使用者的一個點選 ).
2.JProfiler GUI通過自身Socket的8849埠向位於JVM的JProfiler Agent傳送監控指令.
3.JProfiler Agent收到指令後向JVMTI註冊事件或執行相關的命令.
4.JVMTI根據事件和命令的型別返回相對應的資料( 執行緒狀態、物件例項、CPU負荷、GC狀態資訊等)
5.JProfiler Agent從JVMTI中得到相應資料後將對其進行計算,最終通過Socket傳輸給JProfiler GUI中進行展示.
5.JProfiler的使用
5.1 安裝
ofollow,noindex">https://www.ej-technologies.com/download/jprofiler/files
* Window作業系統 請安裝9.X版本,輸入啟用碼對軟體進行啟用.
啟用碼:[email protected]#23874-hrwpdp1sh1wrn#0620
* Linux作業系統無須啟用
5.2 JProfiler與應用進行連線
1 與正在執行的JVM例項進行連線
Select from all local JVMs模式:將掃描本地所有正在執行的JVM例項
Attach to profiled JVM模式:選擇本地或遠端正在執行的JVM例項,遠端被監控的機器一定要預先安裝JProfiler.
* 需指定遠端伺服器的JProfiler的通訊埠
2 啟動一個新的JVM例項一併連線
* 需要指定程式的啟動類( 包含main方法的類 )
3 與Server進行整合( 需與服務捆綁 )
步驟一:Session-->Integration Wizards-->New Server Integration
步驟二:選擇應用伺服器的型別以及版本號
步驟三:選擇與本地或遠端伺服器的服務進行整合
* 本文將使用遠端伺服器模式.
* 若 選擇與遠端伺服器的服務進行整合則需要選擇遠端伺服器的作業系統型別.
步驟四:選擇伺服器使用的JVM供應商以及版本號
步驟五:選擇JProfiler的啟動模式
Wait for JProfiler GUI模式
JVM將等待JProfiler Agent接收到JProfiler GUI傳送的配置資訊後再進行啟動( 即Lauch Type連線模式 ,啟動一個新的JVM例項)
Prepare for profling模式
立即啟動JVM,稍後再與JProfiler GUI進行連線並向JProfiler Agent傳送配置資訊( 資料的採集方式、過濾器、觸發器等資訊 )
* 若使用此模式則需要讓JVM在啟動時自動載入JProfiler Agent,因此需要在startup.bat/startup.sh檔案中新增命令
startup.bat:set CATALINA_OPTS=-agentpath:{JProfiler安裝目錄}\bin\windows-x64\jprofilerti.dll=port=8849,nowait %CATALINA_OPTS%
startup.sh:CATALINA_OPTS=-agentpath:/{JProfiler安裝目錄}/bin/linux-x64/libjprofilerti.so=port=8849,nowait $CATALINA_OPTS
export CATALINA_OPTS
Profile Offine模式
離線分析,JProfiler GUI無法與JProfiler Agent進行連線,因此需要將資料的採集方式、過濾器、觸發器等資訊打包成config.xml配置檔案,在啟動該JVM例項時載入JProfiler Agent以及配置檔案,使用此模式需要配合triggers觸發器使用,當發生指定的事件後觸發指定的操作.
* 若使用此模式則需要讓JVM在啟動時自動載入JProfiler Agent和context.xml配置檔案,因此需要在startup.bat/startup.sh檔案中新增命令
startup.bat:set CATALINA_OPTS=-agentpath:{JProfiler安裝目錄}\bin\windows-x64\jprofilerti.dll=port=8849,nowait,config=C:\Users\{使用者名稱}\.jprofiler9\config.xml %CATALINA_OPTS%
startup.sh:CATALINA_OPTS=-agentpath:/{JProfiler安裝目錄}/bin/linux-x64/libjprofilerti.so=port=8849,config={預定義目錄}\config.xml $CATALINA_OPTS
export CATALINA_OPTS
步驟六:填寫遠端伺服器的IP地址
步驟七:輸入遠端伺服器中JProfiler的安裝目錄( 供JProfiler生成指令碼時使用 )
步驟八:選擇應用伺服器的啟動指令碼,JProfiler會根據選擇的啟動指令碼檔案生成一份適用於JProfiler特定啟動模式的指令碼檔案.
* 最終在本地生成startup_jprofiler.sh檔案,需將此檔案複製到遠端伺服器中應用伺服器的bin目錄並對檔案賦予執行的許可權,在伺服器中直接通過JProfiler提供的startup_jprofiler.sh檔案來啟動服務.
* 若使用離線啟動模式則還需要將JProfiler生成的context.xml配置檔案複製到遠端伺服器中,然後修改startup_jprofiler.sh檔案中JVM載入context.xml檔案的路徑.
步驟九:設定JProfiler GUI通訊的埠
步驟十:檢查配置項
步驟十一:選擇資料的採集方式
Instrumentation重構模式
JProfiler將對需要分析的class位元組碼檔案中寫入自己的bytecode, 對於正在執行的JVM例項選擇此模式將會重新載入位元組碼檔案到JVM的執行時資料區域結構中 .
* 這是JProfiler全功能模式,在此設定中,呼叫堆疊資訊是準確的,但是CPU開銷可能很高( 取決於Filter的控制 ),若要分析的類較多,則對應用的效能產生影響,因此使用此模式一般配合Filter使用,只對特定的類或包進行分析.
Sampling抽樣模式
此模式對CPU的開銷非常低,但不支援某些功能( 方法的執行次數、執行時間等 ), 這種模式在連線正在執行的JVM例項時更為安全.
步驟十二:選擇配置Filter和Trigger
配置Filter( 適用於Instrumentation資料採集模式 )
配置Trigger( 多用在離線的啟動模式 )
1.選擇觸發器的型別
2.選擇觸發的動作
步驟十三:完成配置,連線JProfiler Agent,對程式進行監控.
* 每個Session表示一次會話,Session可以通過人工建立 ( New Session ) 或者與服務應用進行整合來產生( Integration Wizards ).
* 支援將當前JVM例項的執行狀態儲存為快照( Save Snapshot )並提供快照與快照之間的對比功能.
5.3 檢視介紹
Telemetries檢視:包含JMM記憶體的使用情況( 全域性堆與非堆、區域性伊甸園區、倖存者區、老年代)、GC執行緒的活動情況( 發生GC的時間,是屬於Minor GC還是Full GC )、當前JVM例項的執行緒概況、CPU的負載等資訊.
Live Memory檢視:展示當前堆中例項的個數、方法的呼叫鏈等資訊.
方法呼叫鏈資訊:
Heap Walker檢視:用於堆的快照分析,可以選擇在Live Memory中記錄的物件或者當前執行狀態時堆的物件也可以直接在物件檢視右鍵物件Show Selection In Heap Walker.
CPU Views檢視:可以按執行順序逐級檢視當前程式執行時的耗時、在一定時間內統計方法的執行效率.
程式執行耗時:
一定時間內統計方法的執行效率( 單位:微秒 ):
Total Time:執行總時長.
Inv:執行的次數.
Avg Time:方法平均執行時長.
Median Time:第中間次數的執行時長.
Min Time:最短執行時長.
Max Time:最大執行時長.
Linux公社的RSS地址: https://www.linuxidc.com/rssFeed.aspx
本文永久更新連結地址: https://www.linuxidc.com/Linux/2018-09/154036.htm