jdk自帶一些性能監(jiān)控工具, 放在jdk目錄下bin里面. 這里面的工具采用了java代碼實(shí)現(xiàn).
tools.jar中的類庫不屬于Java的標(biāo)準(zhǔn)api.
本文中的命令參數(shù)列表詳見書本<深入理解Java虛擬機(jī)>.
jdk自帶的性能監(jiān)測工具主要分為兩大類: 命令行工具和可視化工具
命令行工具
jps (JVM Process Status Tool) 虛擬機(jī)進(jìn)程狀況工具
顯示指定系統(tǒng)內(nèi)所有的HotSpot虛擬機(jī)進(jìn)程. 此命令用來找出我們運(yùn)行中的項(xiàng)目的PID, 是此后排錯(cuò)步驟中的首要步驟.
- 命令格式
jps [ options ] [ hostid ]
jstat (JVM Statistics Monitoring Tool) 虛擬機(jī)統(tǒng)計(jì)信息監(jiān)視工具
用于收集HotSpot虛擬機(jī)各方面的運(yùn)行數(shù)據(jù)
- 命令格式
jstat [ option vmid [ interval [s|ms] [count] ] ]
jinfo (Configuration Info for Java) java配置信息工具
顯示虛擬機(jī)配置信息
- 命令格式
jinfo [ option ] pid
jmap (Memory Map for Java) java內(nèi)存映像工具
生成虛擬機(jī)的內(nèi)存轉(zhuǎn)儲快照(heapdump)文件
- 命令格式
jmap [ option ] vmid
jhat (JVM Heap Dump Browser) 虛擬機(jī)堆轉(zhuǎn)儲快照分析工具
分析heapdump文件, 建立一個(gè)HTTP/HTML服務(wù)器, 讓用戶可以再瀏覽器上查看分析結(jié)果. 主要搭配jmap來使用.
- 命令格式
jhat heapdump_location
jstack (Stack Trace for Java) java堆棧跟蹤根據(jù)
顯示虛擬機(jī)的線程快照, 主要用于定位線程出現(xiàn)長時(shí)間停頓的原因.
- 命令格式
jstack [ option ] vmid
可視化工具
JConsole( Java Monitoring and Management Console )
- 內(nèi)存頁相當(dāng)于可視化的
jstat
命令
用于監(jiān)視Java heap和永久代的變化趨勢 - 線程頁相當(dāng)于可視化的
jstack
命令
遇到線程停頓的時(shí)候可以使用這個(gè)頁面進(jìn)行監(jiān)控分析
常見線程停頓原因: 等待外部資源(數(shù)據(jù)庫, 網(wǎng)絡(luò)資源, 設(shè)備資源) , 死循環(huán), 鎖等待.
VisualVM( 多合一故障處理工具 )
此款性能監(jiān)測工具功能非常強(qiáng)大, VisualVM可以做到 :
- 顯示虛擬機(jī)進(jìn)程及進(jìn)程的配置和環(huán)境信息(jps jinfo)
- 監(jiān)視應(yīng)用程序的CPU, GC, 堆, 方法區(qū)及線程的信息(jstat jstack)
- dump及分析堆轉(zhuǎn)儲快照(jmap jhat)
- 方法級的程序運(yùn)行性能分析, 找出被調(diào)用最多, 運(yùn)行時(shí)間最長的方法.
- 離線程序快照 : 收集程序的運(yùn)行時(shí)配置, 線程dump, 內(nèi)存dump 等信息建立一個(gè)快照, 將快照發(fā)送給開發(fā)者處進(jìn)行Bug反饋.
- 其它plugins的無限可能性...