JProfiler性能分析工具詳解

1.簡介

JProfiler 是一個(gè)商業(yè)授權(quán)的 Java剖析工具,用于分析Java EE和Java SE應(yīng)用程序.

2.JVMTI

JDK 本身定義了目標(biāo)明確并功能完善的JNI( Java Native Interface ) 與虛擬機(jī)直接進(jìn)行交互,這些 API 能很方便的進(jìn)行擴(kuò)展,從而滿足開發(fā)者各式的需求.

JVMTI( JVM Tool Interface) ,是JAVA虛擬機(jī)提供的本地接口,它是實(shí)現(xiàn)調(diào)度器以及其它Java運(yùn)行測試與分析 工具 的基礎(chǔ).

并不一定在所有的JDK提供商都有實(shí)現(xiàn),但在主流的Oracle JDK、Open JDK上都有其實(shí)現(xiàn).

  • 在開發(fā)的過程中一般是使用Agent的方式來使用JVMTI,通過調(diào)用JVMTI的函數(shù),從JVM中得到當(dāng)前的運(yùn)行信息.

3.JProfiler內(nèi)部模型

JProfiler性能分析工具詳解

4.JProfiler數(shù)據(jù)采集的原理

JProfiler性能分析工具詳解

1.用戶在JProfiler GUI中下達(dá)監(jiān)控命令( 對應(yīng)用戶的一個(gè)點(diǎn)擊 ).

2.JProfiler GUI通過自身Socket的8849端口向位于JVM的JProfiler Agent發(fā)送監(jiān)控指令.

3.JProfiler Agent收到指令后向JVMTI注冊事件或執(zhí)行相關(guān)的命令.

4.JVMTI根據(jù)事件和命令的類型返回相對應(yīng)的數(shù)據(jù)( 線程狀態(tài)、對象實(shí)例、CPU負(fù)荷、GC狀態(tài)信息等)

5.JProfiler Agent從JVMTI中得到相應(yīng)數(shù)據(jù)后將對其進(jìn)行計(jì)算,最終通過Socket傳輸給JProfiler GUI中進(jìn)行展示.

5.JProfiler的使用

5.1 安裝

https://www.ej-technologies.com/download/jprofiler/files

  • Window操作系統(tǒng) 請安裝9.X版本,輸入激活碼對軟件進(jìn)行激活.

激活碼:L-Larry_Lau@163.com#23874-hrwpdp1sh1wrn#0620

***** Linux操作系統(tǒng)無須激活

5.2 JProfiler與應(yīng)用進(jìn)行連接

1 與正在運(yùn)行的JVM實(shí)例進(jìn)行連接

Select from all local JVMs模式:將掃描本地所有正在運(yùn)行的JVM實(shí)例

JProfiler性能分析工具詳解

Attach to profiled JVM模式:選擇本地或遠(yuǎn)程正在運(yùn)行的JVM實(shí)例,遠(yuǎn)程被監(jiān)控的機(jī)器一定要預(yù)先安裝JProfiler.

JProfiler性能分析工具詳解

***** 需指定遠(yuǎn)程 服務(wù)器的JProfiler的通訊端口

2 啟動(dòng)一個(gè)新的JVM實(shí)例一并連接

JProfiler性能分析工具詳解
  • 需要指定程序的啟動(dòng)類( 包含main方法的類 )

3 與Server進(jìn)行集成( 需與服務(wù)捆綁 )

步驟一:Session-->Integration Wizards-->New Server Integration

JProfiler性能分析工具詳解

步驟二:選擇應(yīng)用服務(wù)器的類型以及版本號

JProfiler性能分析工具詳解

步驟三:選擇與本地或遠(yuǎn)程服務(wù)器的服務(wù)進(jìn)行集成

JProfiler性能分析工具詳解

***** 本文將使用遠(yuǎn)程服務(wù)器模式.

***** 若 選擇與遠(yuǎn)程服務(wù)器的服務(wù)進(jìn)行集成則需要選擇遠(yuǎn)程服務(wù)器的操作系統(tǒng)類型.

步驟四:選擇服務(wù)器使用的JVM供應(yīng)商以及版本號

JProfiler性能分析工具詳解

步驟五:選擇JProfiler的啟動(dòng)模式

JProfiler性能分析工具詳解

Wait for JProfiler GUI模式

JVM將等待JProfiler Agent接收到JProfiler GUI發(fā)送的配置信息后再進(jìn)行啟動(dòng)( 即Lauch Type連接模式 ,啟動(dòng)一個(gè)新的JVM實(shí)例)

Prepare for profling模式

立即啟動(dòng)JVM,稍后再與JProfiler GUI進(jìn)行連接并向JProfiler Agent發(fā)送配置信息( 數(shù)據(jù)的采集方式、過濾器、觸發(fā)器等信息 )

***** 若使用此模式則需要讓JVM在啟動(dòng)時(shí)自動(dòng)加載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進(jìn)行連接,因此需要將數(shù)據(jù)的采集方式、過濾器、觸發(fā)器等信息打包成config.xml配置文件,在啟動(dòng)該JVM實(shí)例時(shí)加載JProfiler Agent以及配置文件,使用此模式需要配合triggers觸發(fā)器使用,當(dāng)發(fā)生指定的事件后觸發(fā)指定的操作.

***** 若使用此模式則需要讓JVM在啟動(dòng)時(shí)自動(dòng)加載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={預(yù)定義目錄}\config.xml $CATALINA_OPTS

export CATALINA_OPTS

步驟六:填寫遠(yuǎn)程服務(wù)器的IP地址

JProfiler性能分析工具詳解

步驟七:輸入遠(yuǎn)程服務(wù)器中JProfiler的安裝目錄( 供JProfiler生成腳本時(shí)使用 )

JProfiler性能分析工具詳解

步驟八:選擇應(yīng)用服務(wù)器的啟動(dòng)腳本,JProfiler會(huì)根據(jù)選擇的啟動(dòng)腳本文件生成一份適用于JProfiler特定啟動(dòng)模式的腳本文件.

JProfiler性能分析工具詳解

***** 最終在本地生成startup_jprofiler.sh文件,需將此文件復(fù)制到遠(yuǎn)程服務(wù)器中應(yīng)用服務(wù)器的bin目錄并對文件賦予執(zhí)行的權(quán)限,在服務(wù)器中直接通過JProfiler提供的startup_jprofiler.sh文件來啟動(dòng)服務(wù).

***** 若使用離線啟動(dòng)模式則還需要將JProfiler生成的context.xml配置文件復(fù)制到遠(yuǎn)程服務(wù)器中,然后修改startup_jprofiler.sh文件中JVM加載context.xml文件的路徑.

步驟九:設(shè)置JProfiler GUI通訊的端口

JProfiler性能分析工具詳解

步驟十:檢查配置項(xiàng)

JProfiler性能分析工具詳解

步驟十一:選擇數(shù)據(jù)的采集方式

JProfiler性能分析工具詳解

Instrumentation重構(gòu)模式

JProfiler將對需要分析的class字節(jié)碼文件中寫入自己的bytecode, 對于正在運(yùn)行的JVM實(shí)例選擇此模式將會(huì)重新加載字節(jié)碼文件到JVM的運(yùn)行時(shí)數(shù)據(jù)區(qū)域結(jié)構(gòu)中 .

***** 這是JProfiler全功能模式,在此設(shè)置中,調(diào)用堆棧信息是準(zhǔn)確的,但是CPU開銷可能很高( 取決于Filter的控制 ),若要分析的類較多,則對應(yīng)用的性能產(chǎn)生影響,因此使用此模式一般配合Filter使用,只對特定的類或包進(jìn)行分析.

Sampling抽樣模式

此模式對CPU的開銷非常低,但不支持某些功能( 方法的執(zhí)行次數(shù)、執(zhí)行時(shí)間等 ), 這種模式在連接正在運(yùn)行的JVM實(shí)例時(shí)更為安全.

步驟十二:選擇配置Filter和Trigger

JProfiler性能分析工具詳解

配置Filter( 適用于Instrumentation數(shù)據(jù)采集模式 )

JProfiler性能分析工具詳解

配置Trigger( 多用在離線的啟動(dòng)模式 )

1.選擇觸發(fā)器的類型

JProfiler性能分析工具詳解

2.選擇觸發(fā)的動(dòng)作

JProfiler性能分析工具詳解

步驟十三:完成配置,連接JProfiler Agent,對程序進(jìn)行監(jiān)控.

JProfiler性能分析工具詳解

***** 每個(gè)Session表示一次會(huì)話,Session可以通過人工創(chuàng)建 ( New Session ) 或者與服務(wù)應(yīng)用進(jìn)行集成來產(chǎn)生( Integration Wizards ).

***** 支持將當(dāng)前JVM實(shí)例的運(yùn)行狀態(tài)保存為快照( Save Snapshot )并提供快照與快照之間的對比功能.

5.3 視圖介紹

Telemetries視圖:包含JMM內(nèi)存的使用情況( 全局堆與非堆、局部伊甸園區(qū)、幸存者區(qū)、老年代)、GC線程的活動(dòng)情況( 發(fā)生GC的時(shí)間,是屬于Minor GC還是Full GC )、當(dāng)前JVM實(shí)例的線程概況、CPU的負(fù)載等信息.

JProfiler性能分析工具詳解

Live Memory視圖:展示當(dāng)前堆中實(shí)例的個(gè)數(shù)、方法的調(diào)用鏈等信息.

JProfiler性能分析工具詳解

方法調(diào)用鏈信息:

JProfiler性能分析工具詳解

Heap Walker視圖:用于堆的快照分析,可以選擇在Live Memory中記錄的對象或者當(dāng)前運(yùn)行狀態(tài)時(shí)堆的對象也可以直接在對象視圖右鍵對象Show Selection In Heap Walker.

JProfiler性能分析工具詳解

CPU Views視圖:可以按運(yùn)行順序逐級查看當(dāng)前程序運(yùn)行時(shí)的耗時(shí)、在一定時(shí)間內(nèi)統(tǒng)計(jì)方法的執(zhí)行效率.

程序運(yùn)行耗時(shí):

JProfiler性能分析工具詳解

一定時(shí)間內(nèi)統(tǒng)計(jì)方法的執(zhí)行效率( 單位:微秒 ):

JProfiler性能分析工具詳解

Total Time:執(zhí)行總時(shí)長.

Inv:執(zhí)行的次數(shù).

Avg Time:方法平均執(zhí)行時(shí)長.

Median Time:第中間次數(shù)的執(zhí)行時(shí)長.

Min Time:最短執(zhí)行時(shí)長.

Max Time:最大執(zhí)行時(shí)長.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容