1. 程式人生 > >jvm監控工具之jstat篇

jvm監控工具之jstat篇

jvm監控工具之jstat篇

1.jstat用於輸出指定 java 進程的統計信息

用法:
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編譯方法統計

-h n 每n個樣本,顯示header一次
-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篇