1.JDK的命令行工具
jdk自帶監(jiān)控和故障處理工具
| 名稱 | 主要作用 |
|---|---|
| jps | JVM Process Status Tool,顯示指定系統(tǒng)內(nèi)所有HotSpot虛擬機進程 |
| jstat | JVM Statistics Monitoring Tool,用于收集HostSport虛擬機各方面的運行數(shù)據(jù) |
| jinfo | Configuation Info for Java,顯示虛擬機的配置信息 |
| jmap | Mammory Map for java,生成虛擬機的存儲快照(heapdump文件) |
| jhat | JVM Heap Dump Browser,用于分析heapdump文件,會建立一個http/HTML的服務(wù)器,讓用戶通過瀏覽器查看分析結(jié)果 |
| jstack | Stack Trace for Java,顯示虛擬機的線程快照 |
1.1 jps
jsp運行示例:
jps -mlv

jps執(zhí)行效果
| 選項 | 作用 |
|---|---|
| -q | 只輸出LVMID,省略主類名稱 |
| -m | 輸出虛擬機啟動時傳遞給main函數(shù)的參數(shù) |
| -l | 輸出主類的名稱,如果執(zhí)行進程是jar包,則輸出jar包路徑 |
| -v | 輸出虛擬機進程啟動時的jvm參數(shù) |
1.2 jstat
jstat 虛擬機統(tǒng)計信息監(jiān)控工具
jstat命令格式:
jstat [option vmid [interval [s|ms] [count] ] ]
表示 選項 進程ID 間隔時間[s|ms] 查詢次數(shù)
如果運行的是遠程主機,則vmid格式如下:
[protocol:][//]lvmid[@hostname[:port]/servername]
jstat運行示例

jstat -gc port
| 選項 | 作用 |
|---|---|
| -q | 只輸出LVMID,省略主類名稱 |
| -class | 監(jiān)視類裝載、卸載數(shù)量、總空間以及類裝載所耗費的時間 |
| -gc | 監(jiān)視java堆狀況,包括eden區(qū),兩個survivor區(qū),老年代,永久代等的容量、已用空間、GC時間等統(tǒng)計信息 |
| -gccapacity | 監(jiān)視與-gc基本相同,但是輸出關(guān)注java堆的各個區(qū)域的最大、最小空間 |
| -gcutil | 監(jiān)視內(nèi)容與-gc基本相同,但輸出的主要關(guān)注已使用空間占總空間的百分比 |
| -gccause | 與-gcutil基本相同,但會輸出上一次GC產(chǎn)生的原因 |
| -gcnew | 監(jiān)視新生代的GC狀況 |
| -gcnewcapacity | 監(jiān)視與-gcnew基本相同,但是輸出關(guān)注java堆的各個區(qū)域的最大、最小空間 |
| -gcold | 監(jiān)視老年代的GC狀況 |
| -gcnewcapacity | 監(jiān)視與-gcold基本相同,但是輸出關(guān)注java堆的各個區(qū)域的最大、最小空間 |
| -gcpermcapcacity | 輸出永久代的最大、最小空間 |
| -compiler | 輸出JIT編譯器編譯過的方法,耗時等信息 |
| -printcompilation | 輸出已經(jīng)被JIT編譯的方法 |

compiler 示例
1.3 jinfo
jinfo java配置信息工具,其作用是實時查看和調(diào)整虛擬機各項參數(shù)。
jinfo [option] pid

jinfo flags 示例
| 選項 | 作用 |
|---|---|
| -flag <name> | 打印指定name參數(shù)的值 |
| -flag [+|-]<name> | 讓指定的name參數(shù)可用或者不可用 |
| -flag <name>=<value> | 設(shè)置一個新參數(shù),name=value |
| -flags | 打印全部JVM參數(shù) |
| -sysprops | 打印JAVA系統(tǒng)參數(shù) |
| 無 | 打印jvm和系統(tǒng)參數(shù) |
1.4 jmap
jmap 用于生成堆轉(zhuǎn)儲快照 heapdump文件.
命令格式
jmap [option] vmid
選項說明:
| 選項 | 作用 |
|---|---|
| -dump | 生成java轉(zhuǎn)儲的堆快照,格式為 -dump:[live,]format=b,file=<filename>,其中l(wèi)ive子參數(shù)說明是否只dump出存活的對象 |
| -finalizerinfo | 顯示在F-Queue中等待Finalizer線程執(zhí)行的finalize方法的對象,只在Linux/Solairs平臺下有效 |
| -heap | 顯示java堆的詳細信息,使用那種回收器、參數(shù)配置、分代狀況等,只在Linux/Solairs平臺下有效 |
| -permstat | 以classLoader為統(tǒng)計口徑顯示永久代內(nèi)存狀態(tài)。只在Linux/Solairs平臺下有效 |
| -F | 當虛擬機對-dump選項沒有響應(yīng)時,可以使用這個參數(shù)強制生成dump快照,只在Linux/Solairs平臺下有效 |
1.4 jhat
該命令主要與jmap搭配使用,用來分析jmap轉(zhuǎn)儲的轉(zhuǎn)儲快照。其中構(gòu)建了一個微型的http/html服務(wù)器。生成dump文件的分析結(jié)果后可以通過瀏覽器進行查看。
通常情況下不采用jhat進行分析,一方面,分析工作需要耗費額外的資源和時間,既然都要在其他機器進行,則不需要限定于上述工具。另外一方面,jhat界面比較簡陋,可以用visualVM,eclipse的Memory Analizer 等更加專業(yè)的分析工具進行替換。
1.5 jstack
jstack java堆棧跟蹤工具,用于生成虛擬機當前時刻的線程快照threaddump文件。
命令格式:
jstack [ option ] |vmid
選項說明:
| 選項 | 作用 |
|---|---|
| -F | 當正常的輸出不被響應(yīng)時,強制輸出線程堆棧 |
| -l | 除堆棧外,顯示關(guān)于鎖的附加信息 |
| -m | 如果調(diào)用到本地方法,則顯示C/C++的堆棧 |

jstack運行示例
2.JDK的可視化工具
主要包括:jConsole、jVisualVM
2.1 jConsole

jConsole 連接

概要信息
2.2 jVisualVM

運行示例
插件更新:
https://visualvm.github.io/pluginscenters.html
上述頁面選擇適合的JDK版本
如
JDK 8 Update 131
https://visualvm.github.io/uc/8u131/updates.xml.gz
JDK 8 Update 40 - 121
JDK 7 Update 79 - 80
https://visualvm.github.io/archive/uc/8u40/updates.xml.gz
jdk版本

jdk版本信息
選擇
https://visualvm.github.io/archive/uc/8u40/updates.xml.gz
打開 jvisualVM -> 設(shè)置

設(shè)置

編輯
保存即可。
之后更新插件, 安裝visualGC

更新插件
重啟,重新進入即可

運行效果圖