JVM學習筆記3:GC日誌和常用命令工具
阿新 • • 發佈:2019-03-28
文檔 排除 for 深入理解 ren read tid 虛擬機 int
本篇是系列的第三篇,本篇會簡單介紹GC日誌如何查看以及常用的命令行工具使用方法。其實Java性能診斷和故障排除可以更多地使用阿裏開源的arthas:https://github.com/alibaba/arthas。
1、GC日誌查看
以下面為例(來自《深入理解Java虛擬機》): 33.125: [GC[DefNew:3324K ->152K(3712K),0.0025925 secs] 3324K ->152K(11940K),0.0031680 secs] 100.667:[Full GC [Tenured:0K->210K(10240K),0.00149142 secs] 4603K ->210K(19456K),[Perm:2999K ->2999K(21248K)],0.015007 secs] [Times : user=0.01,sys=0.00,real=0.02 secs] 最前面的數字“100.67”代表GC發生的時間,指的是JVM啟動以來的秒數。 開頭的“[GC”和“[Full GC”代表停頓類型,Full表示發生了Stop the world。 然後"[DefNew"、"[Tenurde"和"[Perm"表示GC發生區域,和GC收集器有關,"Default New Generation"表示默認的Serial收集器的新生代GC,顯示"DefNew"。 方括號內的“3324K ->152K(3712K)”表示“GC前該區域已使用容量 ->GC後該區域已使用容量(該區域總容量)”。方括號外的 "3324K ->152K(11904K)"表示“GC前對已使用容量 ->GC後堆已使用容量(堆總容量)”。 後面的時間“0.0025925 secs”表示該區域GC消耗時間。“ [Times : user=0.01,sys=0.00,real=0.02 secs]”分別表示用戶態CPU時間,內核態CPU時間和GC開始到結束的Wall Clock Time。 更多請參閱JDK文檔和相關文檔。
2、常用命令工具
常用的命令行工具有:jps、jstat、jinfo、jmap、jstack。而更多的可視化工具如jconsole、visualVM等暫不介紹,讀者有興趣請參閱相關文檔。
2.1 jps
jps用來查看虛擬機進程.既可以看本機java進程,也可以查看遠程主機java進程。
用法:jps [options] [hostid]
一般“jps -mlv”就能看到比較詳細的主類和PID。
2.2 jstat
jstat:JVM Statistics Monitoring Tool,主要用於監視JVM各種運行狀態。輸入 “--help”查看使用方法。 用法:jstat [option vmid [interval [s|ms] [count] ] ] 實例: D:\git\git\java-parent>jstat -gcutil 1696
S0 S1 E O M CCS YGC YGCT FGC FGCT CGC CGCT GCT
0.00 0.00 19.23 0.00 - - 0 0.000 0 0.000 0 0.000 0.000
這裏新生代Eden區域使用19.23%空間,Survivor(S0,S1)都是空的,老年代O-old為空的,元空間M-metaspace和CCS壓縮的類空間未統計,Young GC(Minor GC)的發生0次,Young GC TIme為0.00s,Full GC 次數和Full GC Time都是0,CCS壓縮的類空間的GC此時和GC時間都是0,總的GC 時間是0
更多用法請參閱JDK Tools文檔:https://docs.oracle.com/en/java/javase/11/tools/jstat.html
2.3 jinfo
jinfo:查看下JVM各種參數
用法:jinfo [option] pid
2.4 jmap
jmap:用於生成堆轉存快照heapdump.
用法: jmap [option] vmid
實例:jmap -dump:format=b,file=dump.bin 1696
2.5 jstack
jstack:生成線程快照threaddump。
用法:jstack [option] vmid
實例:jstack -l 1696
上面簡單介紹常用的五個命令,更多命令可以參與JDK Tools文檔。此外更多地推薦阿裏的開源診斷工具arthas。
引用
1.《深入理解Java虛擬機》
2. [JDK Tools文檔](https://docs.oracle.com/en/java/javase/11/tools)
JVM學習筆記3:GC日誌和常用命令工具