JDK自帶的性能調優(yōu)監(jiān)測工具使用示例

JVM性能調優(yōu)監(jiān)控工具jps、jstack、jmap、jhat、jstat位于JDK的bin目錄,這些工具短小精悍,常用于線上系統(tǒng)的分析監(jiān)測。

用來解決如下問題

  1. OutOfMemoryError,分析內存不足的原因
  2. 內存泄漏
  3. 線程死鎖
  4. 鎖競爭
  5. java線程消耗CPU過高

jps(Java Virtual Machine Process Status Tool)

JVM 進程狀態(tài)工具,主要用來輸出JVM中運行的進程狀態(tài)信息

語法格式:


演示如下:




打印多項


jstack(java stack trace)

用來查看某個Java進程內的線程堆棧信息,實時監(jiān)測系統(tǒng)運行時線程棧信息,而不用暫停程序排查,常用于線上系統(tǒng)的問題排查,一般都是間隔一段時間使用jstack命令打印出當前系統(tǒng)實時快照,然后比對線程在在鎖上的執(zhí)行狀態(tài)來判斷系統(tǒng)是否存在死鎖、過度競爭等問題。

語法格式:

演示:
步驟1:top 命令查看按CPU使用率降序進程ID


其實整個系統(tǒng)比較閑,拿來做實驗,最占CPU的是進程ID為12622的進程。

步驟2 :top -Hp pid 命令查看進程中各個線程占用CPU的情況。


可見最占CPU的是ID為13037的線程
與top -Hp pid等價的命令:ps -Lfp pid或者ps -mp pid -o THREAD, tid, time。

步驟3:printf "%x\n" 13037 獲取16進制nid


將十進制13037 轉換為16進制為32ed

步驟4:使用jstack命令分析線程棧信息

  1. jstack -l pid 查看某一JVM進程的所有線程的信息


利用linux輸出重定向,將線程信息輸入到pid12622.dump文件中
然后使用more命令查看此文件

部分信息,以后對這個dump文件信息進行解析

http://blog.csdn.net/rachel_luo/article/details/8920596

  1. jstack -l pid | grep nid查看某一JVM進程的指定線程的信息

利用Linux所提供的管道符“|”將兩個命令隔開,管道符左邊命令的輸出就會作為管道符右邊命令的輸入。連續(xù)使用管道意味著第一個命令的輸出會作為第二個命令的輸入,第二個命令的輸出又會作為第三個命令的輸入,依此類推,grep是支持正則表達式的實用文本搜索工具。


jstat(Java Virtual Machine Statistics Monitoring Tool)

JVM統(tǒng)計監(jiān)測工具, 常用來實時監(jiān)測系統(tǒng)堆的使用情況,以及GC信息、編譯信息、類加載信息,常用來判斷系統(tǒng)JVM參數(shù)是否設置合理,作為系統(tǒng)參數(shù)調優(yōu)的信息統(tǒng)計工具。

語法:

根據(jù)jstat統(tǒng)計的維度不同,可以使用如下表中的選項進行不同維度的統(tǒng)計,不同的操作系統(tǒng)支持的選項可能會不一樣,可以通過-options選項,查看不同操作系統(tǒng)所支持選項。

jstat -option獲取系統(tǒng)支持的選項


選項說明



演示



列名信息參考 http://blog.csdn.net/fenglibing/article/details/6411951

JVM堆內存布局(JDK1.7及之前,JDK1.8已經(jīng)移除永久代i,而使用元數(shù)據(jù),元數(shù)據(jù)屬于堆外內存,但是也間接被GC管理)


說明:

jmap(Memory Map)和jhat(Java Heap Analysis Tool)

jmap用來查看堆內存(JVM中各個代的內存情況,對象占用情況)使用狀況,還可以導出整個JVM的內存信息,一般結合jhat使用。

常用命令格式(注意64位JDK,需要加每條命令要加 -J-d64):

jmap -heap [pid] 查看整個JVM中內存使用情況(還含有JDK版本,GC策略相關等)。



需要注意當使用CMS GC時 jmap -heap命令可能導致Java進程被掛起

jmap -histo [pid]

查看JVM堆中存活對象的詳細使用情況,常用于分析OutOfMemory


jmap -dump:format=b, file=fileName [pid]

將整個JVM內存信息以二進制的形式導出到指定文件,這個二進制文件可以通過JHAT來分析


分析內存快照

jhat [file]

分析內存占用,對象引用關系等, J-Xmx1024意思是將最大堆參數(shù)-Xmx1024傳遞給啟動jhat分析的JVM進程的。




通過瀏覽器訪問 http:ip:7000地址,進行分析



首頁按包進行分組,有全限定類名和此類加載到永久代的堆地址

點擊鏈接查看指定類的的加載信息,繼承信息,數(shù)據(jù)域、引用信息,以及創(chuàng)建的對象實例信息

本文參考如下鏈接,只是對這些工具的總結筆記

參考以及拓展鏈接
R大(莫樞)借HSDB來探索HotSpot VM的運行時數(shù)據(jù)
Thread dump 分析綜述
http://blog.csdn.net/fenglibing/article/details/6411940
http://www.open-open.com/lib/view/open1390916852007.html
http://blog.csdn.net/qq_16811963/article/details/52997178

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容