1. 程式人生 > >JVM學習筆記3:GC日誌和常用命令工具

JVM學習筆記3:GC日誌和常用命令工具

文檔 排除 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日誌和常用命令工具