jvm監控工具之jstat篇
阿新 • • 發佈:2018-04-22
jvm監控工具之jstat篇1.jstat用於輸出指定 java 進程的統計信息
-h n 每n個樣本,顯示header一次
-t n 在第一列顯示時間戳列,時間戳時從jvm啟動開始計算
<vmid> 就是進程號
<interval> interval是監控時間間隔,單位為微妙,不提供就意味著單次輸出
<count> count是最大輸出次數,不提供且監控時間間隔有值的話, 就無限打印
用法:
Jstat : jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
其中的<option>為必須提供的選項,所有的可用選項可使用jstat -options列出
[root@VM_82_178_redhat ~]# jstat -options -class -compiler -gc -gccapacity -gccause -gcmetacapacity -gcnew -gcnewcapacity -gcold -gcoldcapacity -gcutil -printcompilation
2.常用選項(附帶每個選項的輸出列名介紹)
class:統計classloader的行為
compiler:統計hotspot just-in-time編譯器的行為
gc:統計gc行為
gccapacity:統計堆中代的容量、空間
gccause:垃圾收集統計,包括最近引用垃圾收集的事件,基本同gcutil,比gcutil多了兩列
gcnew:統計新生代的行為
gcnewcapacity:統計新生代的大小和空間
gcold:統計舊生代的行為
gcoldcapacity:統計舊生代的大小和空間
gcpermcapacity:統計永久代的大小和空間
gcutil:垃圾收集統計
printcompilation:hotspot編譯方法統計
-t n 在第一列顯示時間戳列,時間戳時從jvm啟動開始計算
<vmid> 就是進程號
<interval> interval是監控時間間隔,單位為微妙,不提供就意味著單次輸出
<count> count是最大輸出次數,不提供且監控時間間隔有值的話, 就無限打印
3.具體參數使用介紹
1.class選項:
#jstat -class 4214 2000 10 (每隔2秒監控一次,一共做10次)
Loaded Bytes Unloaded Bytes Time 9197 18418. 0 0 0.0 12.49 9197 18418. 0 0 0.0 12.49 列名介紹: Column Description Loaded 被讀入類的數量 Bytes 被讀入的字節數(K) Unloaded 被卸載類的數量 Bytes 被卸載的字節數(K) Time 花費在load和unload類的時間
2.選項-compiler
[root@tomcat01 test001]# jstat -compiler 13614
Compiled Failed Invalid Time FailedType FailedMethod
3463 2 0 70.23 1 org/apache/tomcat/util/IntrospectionUtils setProperty
3.GC選項:
[root@tomcat01 test001]# jstat -gc 13614 2000 10
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
69888.0 69888.0 0.0 440.5 559232.0 392816.0 1398144.0 200682.0 131072.0 91892.5 665 5.352 0 0.000 5.352
69888.0 69888.0 0.0 440.5 559232.0 392816.0 1398144.0 200682.0 131072.0 91892.5 665 5.352 0 0.000 5.352
列名介紹:
Column Description
S0C 當前S0的容量 (KB)
S1C 當前S1的容量 (KB)
S0U S0已使用 (KB)
S1U S1已使用 (KB)
EC 當前eden的容量(KB)
EU Eden已使用 (KB)
OC 當前old的容量(KB)
OU Old已使用 (KB)
PC 當前perm的容量 (KB)
PU Perm已使用 (KB)
YGC young代gc的次數
YGCT young代gc花費的時間
FGC full gc的次數
FGCT full gc的時間
GCT 垃圾收集收集的總時間
4.gccapacity選項:
每隔兩秒統計一次新生代,一共統計5次
[root@tomcat01 test001]# jstat -gccapacity 13614 2000 5
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC PGCMN PGCMX PGC PC YGC FGC
699008.0 699008.0 699008.0 69888.0 69888.0 559232.0 1398144.0 1398144.0 1398144.0 1398144.0 131072.0 262144.0 131072.0 131072.0 699 0
列名介紹:
Column Description
NGCMN 年輕代的最小容量 (KB)
NGCMX 年輕代的最大容量 (KB)
NGC 當前年輕代的容量 (KB)
S0C 當前S0的空間 (KB)
S1C 當前S1的空間 (KB)
EC 當前eden的空間 (KB)
OGCMN 年老代的最小容量 (KB)
OGCMX 年老代的最大容量 (KB)
OGC 當前年老代的容量 (KB)
OC 當前年老代的空間 (KB)
PGCMN 永久代的最小容量 (KB)
PGCMX 永久代的最大容量 (KB)
PGC 當前永久代的容量 (KB)
PC 當前永久代的空間 (KB)
YGC 年輕代gc的次數
FGC full gc的次數
5.gccause參數:
[root@tomcat01 ~]# jstat -gccause 13614
S0 S1 E O P YGC YGCT FGC FGCT GCT LGCC GCC
1.63 0.00 33.97 14.39 70.21 726 5.674 0 0.000 5.674 Allocation Failure No GC
列名介紹:
Column Description
LGCC 最近垃圾回收的原因
GCC 當前垃圾回收的原因
6.gcnew選項:
7.gcoldcapacity選項
[root@tomcat01 ~]# jstat -gcoldcapacity 13614
OGCMN OGCMX OGC OC YGC FGC FGCT GCT
1398144.0 1398144.0 1398144.0 1398144.0 779 0 0.000 5.976
列名介紹:
Column Description
OGCMN 最小年老代容量 (KB)
OGCMX 最大年老代容量(KB)
OGC 當前年老代容量 (KB)
OC 當前年老代空間 (KB)
YGC 年輕代gc次數
FGC full gc次數
FGCT full gc時間
GCT 垃圾收集總時間
8.gcutil
[root@tomcat01 ~]# jstat -gcutil 13614 2000 10
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.68 0.00 98.02 14.48 70.23 804 6.117 0 0.000 6.117
0.00 0.83 34.27 14.48 70.23 805 6.124 0 0.000 6.124
0.00 0.83 34.27 14.48 70.23 805 6.124 0 0.000 6.124
列名介紹:
Column Description
S1 S1使用百分比
E eden使用百分比
O old使用百分比
P perm使用百分比
YGC 年輕代gc次數
YGCT 年輕代gc時間
FGC full gc次數
FGCT full gc時間
GCT 垃圾收集總時間
9.printcompilation
編譯統計的方法
[root@tomcat01 ~]# jstat -printcompilation 13614
Compiled Size Type Method
3514 173 1 net/sf/jsqlparser/parser/CCJSqlParser jj_scan_token
[root@tomcat01 ~]# jstat -printcompilation 13614
Compiled Size Type Method
3516 126 1 java/security/Provider$ServiceKey hashCode
列名介紹:
Column Description
Compiled 被執行的編譯任務的數量
Size 方法字節碼的字節數
Type 編譯類型
Method 編譯方法的類名和方法名。類名使用"/" 代替 "." 作為空間分隔符. 方法名是給出類的方法名. 格式是一致於HotSpot - XX:+PrintComplation 選項
4.詳細堆棧內存空間使用狀態信息查看分析
jmap -heap 4214
Attaching to process ID 4214, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.55-b03
using parallel threads in the new generation.
using thread-local object allocation.
Concurrent Mark-Sweep GC
Heap Configuration: # 堆配置情況
MinHeapFreeRatio = 40 # 最小堆的使用比例
MaxHeapFreeRatio = 70 # 最大堆的可用比例
MaxHeapSize = 2684354560 (2560.0MB) # 最大堆空間大小
NewSize = 713031680 (680.0MB) # 新生代分配大小
MaxNewSize = 713031680 (680.0MB) # 最大可用新生代分配大小
OldSize = 5439488 (5.1875MB) # 老年代大小
NewRatio = 2 # 新生代比例
SurvivorRatio = 8 # 新生代與suvivor的比例
PermSize = 251658240 (240.0MB) # perm區大小
MaxPermSize = 251658240 (240.0MB) # 最大可分配perm區大小
G1HeapRegionSize = 0 (0.0MB) # G1堆區大小
Heap Usage: # 堆使用情況
New Generation (Eden + 1 Survivor Space): # 新生代(伊甸區 + survior空間)
capacity = 641728512 (612.0MB) # 伊甸區容量
used = 507109064 (483.6168899536133MB) # 已經使用大小
free = 134619448 (128.38311004638672MB) # 剩余容量
79.0223676394793% used # 使用比例
Eden Space: # 伊甸區
capacity = 570425344 (544.0MB) # 伊甸區容量
used = 503156488 (479.84741973876953MB) # 伊甸區使用
free = 67268856 (64.15258026123047MB) # 伊甸區當前剩余容量
88.2072462755091% used # 伊甸區使用情況
From Space: # survior1區
capacity = 71303168 (68.0MB) # survior1區容量
used = 3952576 (3.76947021484375MB) # surviror1區已使用情況
free = 67350592 (64.23052978515625MB) # surviror1區剩余容量
5.543338551240809% used # survior1區使用比例
To Space: # survior2 區
capacity = 71303168 (68.0MB) # survior2區容量
used = 0 (0.0MB) # survior2區已使用情況
free = 71303168 (68.0MB) # survior2區剩余容量
0.0% used # survior2區使用比例
concurrent mark-sweep generation: # 老生代使用情況
capacity = 1971322880 (1880.0MB) # 老生代容量
used = 1514740296 (1444.5689163208008MB) # 老生代已使用容量
free = 456582584 (435.4310836791992MB) # 老生代剩余容量
76.83877214472345% used # 老生代使用比例
Perm Generation: # perm區使用情況
capacity = 251658240 (240.0MB) # perm區容量
used = 57814400 (55.1361083984375MB) # perm區已使用容量
free = 193843840 (184.8638916015625MB) # perm區剩余容量
22.973378499348957% used # perm區使用比例
28645 interned Strings occupying 3168232 bytes.
參考文檔:
http://nolinux.blog.51cto.com/4824967/1588716
jvm監控工具之jstat篇