JVM性能調優監控工具jps、jstack、jmap、jhat、jstat位于JDK的bin目錄,這些工具短小精悍,常用于線上系統的分析監測。
用來解決如下問題
- OutOfMemoryError,分析內存不足的原因
- 內存泄漏
- 線程死鎖
- 鎖競爭
- java線程消耗CPU過高
jps(Java Virtual Machine Process Status Tool)
JVM 進程狀態工具,主要用來輸出JVM中運行的進程狀態信息
語法格式:
演示如下:
打印多項
jstack(java stack trace)
用來查看某個Java進程內的線程堆棧信息,實時監測系統運行時線程棧信息,而不用暫停程序排查,常用于線上系統的問題排查,一般都是間隔一段時間使用jstack命令打印出當前系統實時快照,然后比對線程在在鎖上的執行狀態來判斷系統是否存在死鎖、過度競爭等問題。
語法格式:
演示:
步驟1:top 命令查看按CPU使用率降序進程ID
其實整個系統比較閑,拿來做實驗,最占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命令分析線程棧信息
- jstack -l pid 查看某一JVM進程的所有線程的信息
利用linux輸出重定向,將線程信息輸入到pid12622.dump文件中
然后使用more命令查看此文件
部分信息,以后對這個dump文件信息進行解析
http://blog.csdn.net/rachel_luo/article/details/8920596
- jstack -l pid | grep nid查看某一JVM進程的指定線程的信息
利用Linux所提供的管道符“|”將兩個命令隔開,管道符左邊命令的輸出就會作為管道符右邊命令的輸入。連續使用管道意味著第一個命令的輸出會作為第二個命令的輸入,第二個命令的輸出又會作為第三個命令的輸入,依此類推,grep是支持正則表達式的實用文本搜索工具。
jstat(Java Virtual Machine Statistics Monitoring Tool)
JVM統計監測工具, 常用來實時監測系統堆的使用情況,以及GC信息、編譯信息、類加載信息,常用來判斷系統JVM參數是否設置合理,作為系統參數調優的信息統計工具。
語法:
根據jstat統計的維度不同,可以使用如下表中的選項進行不同維度的統計,不同的操作系統支持的選項可能會不一樣,可以通過-options選項,查看不同操作系統所支持選項。
jstat -option獲取系統支持的選項
選項說明
演示
列名信息參考 http://blog.csdn.net/fenglibing/article/details/6411951
JVM堆內存布局(JDK1.7及之前,JDK1.8已經移除永久代i,而使用元數據,元數據屬于堆外內存,但是也間接被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意思是將最大堆參數-Xmx1024傳遞給啟動jhat分析的JVM進程的。
通過瀏覽器訪問 http:ip:7000地址,進行分析
首頁按包進行分組,有全限定類名和此類加載到永久代的堆地址
點擊鏈接查看指定類的的加載信息,繼承信息,數據域、引用信息,以及創建的對象實例信息
本文參考如下鏈接,只是對這些工具的總結筆記
參考以及拓展鏈接
R大(莫樞)借HSDB來探索HotSpot VM的運行時數據
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