1. 程式人生 > >JProfiler性能分析工具

JProfiler性能分析工具

x64 之間 mage 一份 new 影響 指令 alt 適用於

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 安裝

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:最大執行時長.

JProfiler性能分析工具