目錄
一、JVM故障處理工具概述
二、詳細工具解析
1. jps:虛擬機進程狀況工具
2. jstat:虛擬機統計信息監視工具
3. jinfo:Java配置信息工具
4. jmap:Java內存映像工具
5. jhat:堆轉儲快照分析工具
6. jstack:Java堆棧跟蹤工具
7. jcmd:綜合診斷命令工具
三、可視化工具
1. jconsole
2. VisualVM
四、工具使用場景總結
五、實戰建議
六、高級技巧
一、JVM故障處理工具概述
Java虛擬機(JVM)提供了豐富的故障處理工具,可以幫助開發者快速診斷和解決運行時問題。這些工具主要分為以下幾類:
-
??進程狀態工具??:jps
-
??統計監控工具??:jstat
-
??配置信息工具??:jinfo
-
??內存分析工具??:jmap, jhat
-
??堆棧分析工具??:jstack
-
??綜合診斷工具??:jcmd
-
??可視化工具??:jconsole, VisualVM等
二、詳細工具解析
1. jps:虛擬機進程狀況工具
??功能??:列出正在運行的虛擬機進程及其主類名、JVM參數等信息
??常用命令??:
jps -q # 只顯示進程ID
jps -m # 顯示傳遞給main方法的參數
jps -l # 顯示主類的全名
jps -v # 顯示JVM參數
??示例輸出??:
1234 Jps
5678 MyApplication
2. jstat:虛擬機統計信息監視工具
??功能??:監控類加載、內存、GC等JVM運行數據
??常用選項??:
jstat -class <pid> # 類加載統計
jstat -gc <pid> # GC堆行為統計
jstat -gccapacity <pid> # 堆內存統計
jstat -gcutil <pid> # GC統計摘要
jstat -printcompilation <pid> # JIT編譯統計
??示例??(監控GC情況,每1秒刷新一次,共10次):
jstat -gcutil 5678 1000 10
3. jinfo:Java配置信息工具
??功能??:查看和修改虛擬機參數
??常用命令??:
jinfo <pid> # 查看所有參數
jinfo -flags <pid> # 查看顯式設置的參數
jinfo -sysprops <pid> # 查看系統屬性
jinfo -flag <name> <pid> # 查看特定參數值
??示例??(查看最大堆內存設置):
jinfo -flag MaxHeapSize 5678
4. jmap:Java內存映像工具
??功能??:生成堆轉儲快照、查詢堆內存信息
??常用命令??:
jmap -heap <pid> # 顯示堆詳細信息
jmap -histo <pid> # 顯示堆中對象統計
jmap -dump:format=b,file=heap.hprof <pid> # 生成堆轉儲文件
??示例??(生成堆轉儲文件):
jmap -dump:live,format=b,file=myapp.hprof 5678
5. jhat:堆轉儲快照分析工具
??功能??:分析jmap生成的堆轉儲文件
??使用方法??:
jhat heap.hprof
啟動后訪問 http://localhost:7000查看分析結果
??注意??:jhat功能較為基礎,生產環境建議使用MAT(Eclipse Memory Analyzer)等更強大的工具
6. jstack:Java堆棧跟蹤工具
??功能??:生成虛擬機當前時刻的線程快照
??常用命令??:
jstack <pid> # 打印線程堆棧
jstack -l <pid> # 打印鎖信息
jstack -F <pid> # 強制dump(當jvm無響應時)
??示例??(將堆棧信息輸出到文件):
jstack 5678 > thread_dump.txt
7. jcmd:綜合診斷命令工具
??功能??:集成了多種診斷功能的綜合工具
??常用命令??:
jcmd <pid> help # 查看支持的命令
jcmd <pid> VM.flags # 查看JVM參數
jcmd <pid> VM.uptime # 查看JVM運行時間
jcmd <pid> GC.heap_info # 查看堆信息
jcmd <pid> Thread.print # 打印線程堆棧
jcmd <pid> GC.run # 觸發Full GC
三、可視化工具
1. jconsole
Java自帶的監控管理控制臺,可監控內存、線程、類、MBean等
啟動方式:
jconsole
2. VisualVM
功能更強大的可視化工具,支持:
-
應用程序快照
-
CPU和內存 profiling
-
線程分析
-
MBean查看等
四、工具使用場景總結
問題類型 | 推薦工具 |
---|---|
進程查看 | jps |
內存泄漏 | jmap, jhat, VisualVM |
CPU占用高 | jstack, VisualVM |
死鎖 | jstack -l |
GC問題 | jstat, jcmd GC.* |
參數查看/修改 | jinfo, jcmd VM.flags |
綜合診斷 | jcmd |
五、實戰建議
-
??定期收集基線數據??:在系統正常時使用這些工具收集數據,作為問題診斷的基準
-
??組合使用工具??:如先用jps找到問題進程,再用jstat監控GC,最后用jmap生成堆轉儲
-
??自動化監控??:考慮將關鍵指標(jstat數據等)納入監控系統
-
??生產環境謹慎使用??:某些命令(如jmap -dump)會導致JVM暫停,應在低峰期使用
六、高級技巧
-
??遠程連接??:大多數工具支持連接遠程JVM(需配置JMX等)
-
??自動化分析??:結合shell腳本實現自動化診斷
-
??與日志結合??:將工具輸出與應用日志關聯分析
-
??使用替代工具??:對于復雜問題,考慮使用Arthas、MAT等更專業的工具