| 名稱 | 全寫 | 主要作用 |
|---|---|---|
| jpa | JVM Process Status Tool | 顯示指定系統(tǒng)內所有的 HotSpot 虛擬機進程 |
| jstat | JVM Statistics Monitoring Tool | 用于收集 HotSpot 虛擬機各方面的運行參數(shù) |
| jinfo | Configuration Info for Java | 顯示虛擬機配置信息 |
| jmap | Memory Map for Java | 生成虛擬機的內存轉儲快照(heapdump文件) |
| jhat | JVM Heap Dump Browser | 用于 heapdump 文件,它會建立一個HTTP/HTML 服務器,讓用戶可以在瀏覽器上查看分析結果 |
| jstack | Stack Trace for Java | 顯示虛擬機的線程快照 |
1. jps 虛擬機進程狀況工具
命令格式
jps [ options ] [ hostid ]
執(zhí)行樣例

image.png
其他參數(shù)
| 選項 | 作用 |
|---|---|
| -q | 只輸出 LVMID ,省略主類的名稱 |
| -m | 輸出虛擬機進程啟動時主類 main() 函數(shù)的參數(shù) |
| -l | 輸出主類的全名,如果進程執(zhí)行的是 jar 包,輸出 jar 包路徑 |
| -v | 輸出虛擬機進程啟動時 JVM 參數(shù) |
2. jstat 虛擬機統(tǒng)計信息監(jiān)視工具
命令格式
jstat [ options vmid [interval[s|ms] [count] ] ]
執(zhí)行樣例
250毫秒查詢一次進程12914垃圾收集狀態(tài),一共查詢20次

image.png
其他參數(shù)
| 選項 | 作用 |
|---|---|
| -class | 監(jiān)視類裝載、卸載數(shù)量、總空間以及類裝載所耗費的時間 |
| -gc | 監(jiān)視 java 堆狀況,包括 Eden 區(qū)、兩個 survivor 區(qū)、老年代、永久代等的容量、已用空間、GC時間合計等信息 |
| -gccapacity | 監(jiān)視內容與 -gc 基本相同,但輸出主要關注 Java 堆各個區(qū)域使用到的最大、最小空間 |
| -gcutil | 監(jiān)視內容與 -gc 基本相同,但輸出主要關注已使用空間占空間的百分比 |
| -gccause | 與 -gcutil 功能一樣,但是會額外輸出導致上一次 GC 產生的原因 |
| -gcnew | 監(jiān)視新生代 GC 狀況 |
| -gcnewcapacity | 監(jiān)視內容與 -gcnew 基本相同,輸出主要關注使用到的最大、最小空間 |
| -gcold | 監(jiān)視老年代 GC 狀態(tài) |
| -gcoldcapacity | 監(jiān)視內容與 -gcold 基本相同,輸出主要關注使用到的最大、最小空間 |
| -gcpermcapacity | 輸出永久代使用到的最大、最小空間 |
| -compiler | 輸出 JIT 編譯器編譯過的方法、耗時等信息 |
| -printcompilation | 輸出已經被 JIT 編譯的方法 |
3. jinfo Java配置信息工具
命令格式
jstat [ options ] [ hostid ]
執(zhí)行樣例

image.png
4. jmap Java內存映像工具
命令格式
jstat [ options ] [ hostid ]
執(zhí)行樣例

image.png
其它參數(shù)
| 選項 | 作用 |
|---|---|
| -dump | 生成 Java 堆轉儲快照。格式為:-dump:[live, ]format=b, file=<filename>,其中 live 子參數(shù)說明是否只 dump 出存活的對象 |
| -finalizerinfo | 顯示在 F-Queue 中等待 finalizer 線程執(zhí)行 finalize 方法的對象。只在 Linux/Solaris 平臺下有效 |
| -heap | 顯示 Java 堆詳細信息,如使用那種回收期、參數(shù)配置、分代狀況等。只在 Linux/Solaris 平臺下有效 |
| -histo | 顯示堆中對象統(tǒng)計信息,包括類、實例數(shù)量、合計容量 |
| -permstat | 已 ClassLoader 為統(tǒng)計口徑顯示永久代內存狀態(tài)。只在 Linux/Solaris 平臺下有效 |
| -F | 當虛擬機進程對 -dump 選項沒有響應時,可使用這個選項強制生成 dump 快照。只在 Linux/Solaris 平臺下有效 |
5. jhat 虛擬機堆轉儲快照分析工具
命令格式
jhat 堆文件
6. jstack Java堆棧跟蹤工具
命令格式
jstack [ option ] vmid
執(zhí)行樣例

image.png
其它參數(shù)
| 選項 | 作用 |
|---|---|
| -F | 當正常輸出的請求不被響應時,強制輸出線程堆棧 |
| -l | 除堆棧外,顯示關于鎖的附件信息 |
| -m | 如果調用到本地方法的話,可以顯示 C/C++ 的堆棧 |
在 JDK 1.5中,java.lang.Thread 類新增了一個 getAllStackTraces() 方法用于獲取虛擬機中所有線程的 StackTraceElement 對象。使用這個可以隨時查看線程堆棧。
for (Map.Entry<Thread, StackTraceElement[]> threadEntry : Thread.getAllStackTraces().entrySet()) {
Thread key = threadEntry.getKey();
StackTraceElement[] value = threadEntry.getValue();
if (key.equals(Thread.currentThread())) {
continue;
}
log.info("線程:" + key.getName());
for (StackTraceElement stackTraceElement : value) {
log.info("{}", stackTraceElement);
}
}