$JAVA_HOME/bin)| 工具 | 全稱 | 核心功能 |
|---|---|---|
| jps | JVM Process Status Tool | 列出本機 HotSpot 進程(LVMID=PID)、主類名、參數 |
| jstat | JVM Statistics Monitoring Tool | 類加載/內存/GC/JIT 編譯 運行時統計,文本界面首選 |
| jinfo | Configuration Info for Java | 查看/修改 JVM 配置參數(含默認值) |
| jmap | Memory Map for Java | 堆轉儲快照、堆詳情、對象統計、永久代/元空間統計 |
| jhat | JVM Heap Dump Browser | 分析 heapdump,啟動 HTTP 服務供瀏覽器查看 |
| jstack | Stack Trace for Java | 線程堆疊快照,定位死鎖/長時間停頓 |
jps -l # 顯示主類全名/JAR 路徑 jps -v # 顯示 JVM 啟動參數 jps -m # 顯示 main 方法參數
jstat -gc1000 10 # 每秒查詢一次 GC 狀態,共 10 次 jstat -class # 類加載統計 jstat -compiler # JIT 編譯統計
常用 option:-class、-gc、-gccapacity、-gcutil、-gccause、-compiler、-printcompilation。
jinfo -flag MaxHeapSize# 查詢單個參數值 jinfo -flags # 打印所有參數(含未顯式設置的默認值) jinfo -flag +PrintGCDetails # 運行時動態開啟 GC 日誌(部分參數支援)
jmap -dump:live,format=b,file=heap.hprof# 僅存活對象導出 jmap -heap # 堆配置/使用詳情(Linux/Solaris) jmap -histo # 對象統計:類、實例數、總大小 jmap -permstat # ClassLoader 維度永久代統計(Linux/Solaris) jmap -F # 強制導出(進程無響應時)
jhat -port 7000 heap.hprof # 瀏覽器訪問 https://localhost:7000 查看 OQL 查詢、對象引用鏈等
jstack -l# 含鎖信息(定位死鎖關鍵) jstack -m # 含 Native C/C++ 堆疊(JNI 調用排查) jstack -F # 強制導出(進程掛起時)
輸出關鍵狀態:RUNNABLE、BLOCKED (等待鎖)、WAITING/TIMED_WAITING、deadlock 字樣。
jstack 多次抓取 → 對比 RUNNABLE 線程堆疊 → 定位熱點代碼行。jmap -dump:live 導出堆 → jhat/MAT/Eclipse MAT 分析支配者樹。jstack -l 直接報告 Found one Java-level deadlock。jstat -class 觀察 Loaded/Unloaded 趨勢,jmap -permstat 定位 ClassLoader。