本文命令摘自:深入理解JVM虛擬機
JVM常見排查命令:
名稱 | 主要作用 |
jps | JVM Proces status Tool,顯示指定系統內所有的HotSpot虛擬進程 |
jstat | JVM Statistics Monitoring Tool ,用於手機HotSpot 虛擬機各方面的運行數據 |
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]
jps 執行樣例:
其實最主要的是拿到相應JAR的相應的進程的pid
有可能拿不到,這種狀況一般的情況是權限不足,找運維人員申請相應的權限就行了
通過上圖可以看出,jar包的啓動的參數,堆的設置,端口號的設置,
jps工具主要選項描述:
選項 | 作用 |
-q | 只輸出LVMID,省略主類的名稱 |
-m | 輸出虛擬機進程啓動的時候傳遞給主類main()函數的參數 |
-l | 輸出主類的全名,如果進程執行的是jar包,輸出jar路徑 |
-v | 輸出虛擬機進程啓動的時候JVM 參數 |
2.jstat :虛擬機統計信息監視工具
作用描述:顯示虛擬機進程中的類的裝載,內存,垃圾收集,JIT編譯等運行數據,生產服務器排查問題的首選工具
jstat 命令格式:
jstat [option vmid [interval [s|sm][ count]]]
對於命令格式中的VMID,與LVMID需要進行特別說明一下:
如果是本機虛擬機進程,VMID和LVMID一致,如果是遠程虛擬機進程,那VMID的格式應當是:
[protocol:][//]lvmid[@hostname][:port]/servername]
參數interval 和count 代辦查詢間隔和次數,如果省略這兩個參數,說明只查詢一次。
假設 需要每250毫秒查詢一次進程29919 垃圾收集情況,一共查詢20此,那命令應當是:
jstat -gc 29919 250 20
如下圖:
選項 option 代辦這用戶希望查詢的虛擬機信息,主要分爲3類:類裝載,垃圾收集,運行編譯情況,具體選項以及作用如下圖描述
選項 | 作用 |
-class | 監視類裝載,卸載數量,總空間以及類裝載所耗費的時間 |
-gc |
監視JAVA堆情況,包括Eden區,兩個Surivor區,老年代、永久代等的容量,已用空間,GC時間合計等信息 |
-gccapacity | 監視內容與-gc 基本相同,但是輸出主要關注Java堆各個區域使用到最大,最小空間, |
-gcutil | 監視內容與-gc基本相同,但輸出主要關注已使用空間佔總空間的百分比 |
-gccause | 與-gcutils功能意義,但是會額外輸出導致上上一次GC產生的原因 |
-gcnew | 監視新生代GC狀況 |
-gcnewcapacity | 監視內容與-gcnew基本相同,輸出主要關注使用到的最大,最小空間 |
-gcold | 監視老年代GC狀況 |
-gcoldcapcity | 監視內容與-gcold基本相同,輸出主要關注使用到的最大,最小空間 |
-gcpermcapacity | 輸出永久代使用的最大,最小空間 |
-compiler | 輸出JIT編譯器編譯過的方法,耗時等信息 |
-printcompilation | 輸出已經被JIT編譯的方法 |
抽個有代表性的
上圖結果表明:這臺服務器的新生代Eden區(E,表示Eden)使用了65.48%的空間,兩個Surivor區(S0,S1,表示Survivor0,Survivor1)其中survivor1 100%,老年代(O,表示Old)使用了17.18%。程序運行依賴工發生 Minor GC (YGC ,表示Young GC)25次, YGCT代辦 耗時:1.075秒。發生Full GC (FGC,表示 Full GC)2次,FGCT 代表Full GC 總耗時 0.051秒,所有GC總耗時 (GCT)1.126秒
後續命令 ,且看下節分享