jstat是JDK自带的一个轻量级小工具,全称“Java Virtual Machine statistics monitoring tool”,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。 jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。
名词解释
Minor GC
从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC。
YGC
YGC指的是Young Generation GC,年轻代的内存回收,和Minor GC同义。
Major GC
Major GC是指老年代的内存回收。
Full GC
Full GC或者FGC指的是清理整个堆空间,包括年轻代和老年代。
jstat 命令
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
interval & count
interval指定每隔多长时间执行一次,可以使用s/ms作为时间单位。
count指定共执行多少次,如果不提供count,那么将会一直执行下去。
-t
显示时间戳,时间戳会作为第一列进行显示,时间戳是相对于JVM的启动时间计算的,单位秒。
root@host:/data0# jstat -gccause -t 7 1s 5
Timestamp S0 S1 E O M CCS YGC YGCT FGC FGCT GCT LGCC GCC
2148.4 0.00 98.57 55.06 2.46 95.47 93.37 13 0.202 3 0.432 0.634 Allocation Failure No GC
2149.4 0.00 98.57 55.13 2.46 95.47 93.37 13 0.202 3 0.432 0.634 Allocation Failure No GC
2150.4 0.00 98.57 55.13 2.46 95.47 93.37 13 0.202 3 0.432 0.634 Allocation Failure No GC
2151.4 0.00 98.57 56.28 2.46 95.47 93.37 13 0.202 3 0.432 0.634 Allocation Failure No GC
2152.4 0.00 98.57 56.28 2.46 95.47 93.37 13 0.202 3 0.432 0.634 Allocation Failure No GC
-h lines
每隔lines行就显示表头,默认只会显示一次表头。
root@host:/data0# jstat -gccause -h 3 7 1s 5
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT LGCC GCC
0.00 98.57 86.02 2.46 95.47 93.37 13 0.202 3 0.432 0.634 Allocation Failure No GC
0.00 98.57 86.02 2.46 95.47 93.37 13 0.202 3 0.432 0.634 Allocation Failure No GC
0.00 98.57 86.02 2.46 95.47 93.37 13 0.202 3 0.432 0.634 Allocation Failure No GC
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT LGCC GCC
0.00 98.57 86.02 2.46 95.47 93.37 13 0.202 3 0.432 0.634 Allocation Failure No GC
0.00 98.57 86.27 2.46 95.47 93.37 13 0.202 3 0.432 0.634 Allocation Failure No GC
vmid
vmid可以是本地JVM的进程PID(通过JPS可以获取),也可以是远程主机上的JVM实例。
完整的格式为:[protocol:][//]lvmid[@hostname[:port]/servername]
连接远程JVM时,默认使用的协议为:rmi
。
option
可用选型如下:
- class:显示类加载/卸载统计信息
- compiler:显示JIT即时编译的统计信息
- gc:GC相关的堆统计信息
- gccapacity:内存结构中各空间的总容量
- gcutil:内存回收的统计概要
- gccause:与gcutil类似,但多了上次触发GC的原因
- gcnew:新生代统计信息
- gcnewcapacity:新生代容量信息
- gcold:老年代及元空间统计信息
- gcoldcapacity:老年代容量信息
- gcmetacapacity:元空间容量信息
- printcompilation
class
显示类加载/卸载统计信息:
- Loaded:加载的类总数
- Bytes:加载的总字节数
- Unloaded:卸载的类总数
- Bytes:卸载的总字节数
- Time:加载以及卸载类花费的总时间,单位秒
root@host:/data0# jstat -class 7 1s 5
Loaded Bytes Unloaded Bytes Time
14903 28020.2 1 0.9 9.80
14903 28020.2 1 0.9 9.80
14903 28020.2 1 0.9 9.80
14903 28020.2 1 0.9 9.80
14903 28020.2 1 0.9 9.80
compiler
显示JIT即时编译的统计信息:
- Compiled:编译任务执行次数
- Failed:编译任务失败次数
- Invalid:编译任务失效次数
- Time:编译任务总的消耗时间
- FailedType:上次编译失败的编译类型
- FailedMethod:上次编译失败对应的类及方法
root@host:/data0# jstat -compiler 7 1s 5
Compiled Failed Invalid Time FailedType FailedMethod
11494 2 0 63.94 1 java/net/URLClassLoader$1 run
11494 2 0 63.94 1 java/net/URLClassLoader$1 run
11494 2 0 63.94 1 java/net/URLClassLoader$1 run
11495 2 0 63.95 1 java/net/URLClassLoader$1 run
11495 2 0 63.95 1 java/net/URLClassLoader$1 run
gc
GC相关的堆统计信息
- S0C: Survivor 0 总容量,单位KB
- S1C: Survivor 1 总容量,单位KB
- S0U: Survivor 0 使用量,单位KB
- S1U: Survivor 1 使用量,单位KB
- EC: Eden空间总容量,单位KB
- EU: Eden空间使用量,单位KB
- OC: 老年代空间总容量,单位KB
- OU: 老年代空间使用量,单位KB
- MC: Metaspace 总容量,单位KB
- MU: Metacspace 使用量,单位KB
- CCSC: Compressed class space 总容量,单位KB
- CCSU: Compressed class space 使用量,单位KB
- YGC: Minor GC发生次数
- FGC: Full GC发生次数
- YGCT: Minor GC总耗时,单位秒
- FGCT: Full GC总耗时,单位秒
- GCT: GC总耗时,单位秒
root@host:/data0# jstat -gc 7 1s 5
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
27648.0 27648.0 18684.7 0.0 643584.0 235929.2 1398272.0 34497.0 86912.0 82907.0 10880.0 10089.6 20 0.313 3 0.432 0.745
27648.0 27648.0 18684.7 0.0 643584.0 235929.2 1398272.0 34497.0 86912.0 82907.0 10880.0 10089.6 20 0.313 3 0.432 0.745
27648.0 27648.0 18684.7 0.0 643584.0 235929.2 1398272.0 34497.0 86912.0 82907.0 10880.0 10089.6 20 0.313 3 0.432 0.745
27648.0 27648.0 18684.7 0.0 643584.0 235929.2 1398272.0 34497.0 86912.0 82907.0 10880.0 10089.6 20 0.313 3 0.432 0.745
27648.0 27648.0 18684.7 0.0 643584.0 235929.2 1398272.0 34497.0 86912.0 82907.0 10880.0 10089.6 20 0.313 3 0.432 0.745
gccapacity
内存结构中各空间的总容量(单位KB)
- NGCMN: 最小新生代容量
- NGCMX: 最大新生代容量
- NGC: 新生代当前容量
- S0C: Survivor 0 总容量
- S1C: Survivor 1 总容量
- EC: Eden空间容量
- OGCMN: 最小老年代容量
- OGCMX: 最大老年代容量
- OGC: 老年代当前容量
- OC: 区别于OGC,具体区别请Google
- MCMN: 最小元空间容量
- MCMX: 最大元空间容量
- MC: 元空间当前容量
- CCSMN: Compressed class space 最小容量
- CCSMX: Compressed class space 最大容量
- CCSC: Compressed class space 当前容量
- YGC: Minor GC 发生次数
- FGC: Full GC 发生次数
root@host:/data0# jstat -gccapacity 7 1s 5
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
174592.0 174592.0 174592.0 19968.0 19968.0 134656.0 349696.0 349696.0 349696.0 349696.0 0.0 1118208.0 79232.0 0.0 1048576.0 10112.0 35 3
174592.0 174592.0 174592.0 19968.0 19968.0 134656.0 349696.0 349696.0 349696.0 349696.0 0.0 1118208.0 79232.0 0.0 1048576.0 10112.0 35 3
174592.0 174592.0 174592.0 19968.0 19968.0 134656.0 349696.0 349696.0 349696.0 349696.0 0.0 1118208.0 79232.0 0.0 1048576.0 10112.0 35 3
174592.0 174592.0 174592.0 19968.0 19968.0 134656.0 349696.0 349696.0 349696.0 349696.0 0.0 1118208.0 79232.0 0.0 1048576.0 10112.0 35 3
174592.0 174592.0 174592.0 19968.0 19968.0 134656.0 349696.0 349696.0 349696.0 349696.0 0.0 1118208.0 79232.0 0.0 1048576.0 10112.0 35 3
gcutil
内存回收的统计概要:
- S0/S1/E/O/M:这几个指标指的是各个空间当前使用量与总容量的百分比,即使用率
- YGC/FGC:各自执行次数
- YGCT/FGCT/GCT:各自执行总耗时
root@host:/data0# jstat -gcutil 7 1s 5
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
27.20 0.00 9.68 13.17 95.43 93.08 56 0.500 3 0.448 0.948
27.20 0.00 9.68 13.17 95.43 93.08 56 0.500 3 0.448 0.948
27.20 0.00 11.58 13.17 95.43 93.08 56 0.500 3 0.448 0.948
27.20 0.00 11.58 13.17 95.43 93.08 56 0.500 3 0.448 0.948
27.20 0.00 11.58 13.17 95.43 93.08 56 0.500 3 0.448 0.948
gccause
与gcutil类似,但多了两列GC触发的原因:
- LGCC:上次GC触发的原因
- GCC:本次GC触发的原因
root@host:/data0# jstat -gccause 7 1s 5
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT LGCC GCC
0.00 30.62 65.57 13.18 95.44 93.08 59 0.518 3 0.448 0.966 Allocation Failure No GC
0.00 30.62 67.32 13.18 95.44 93.08 59 0.518 3 0.448 0.966 Allocation Failure No GC
0.00 30.62 67.58 13.18 95.44 93.08 59 0.518 3 0.448 0.966 Allocation Failure No GC
0.00 30.62 67.59 13.18 95.44 93.08 59 0.518 3 0.448 0.966 Allocation Failure No GC
0.00 30.62 69.27 13.18 95.44 93.08 59 0.518 3 0.448 0.966 Allocation Failure No GC
gcnew
新生代统计信息:
- TT:Tenuring threshold,经历多少次Minor GC才晋升到老年代
- MTT:Maximum tenuring threshold
- DSS:Desired survivor size (kB)
root@host:/data0# jstat -gcnew 7 1s 5
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
10752.0 10240.0 3435.2 0.0 15 15 10240.0 153600.0 29870.8 60 0.524
10752.0 10240.0 3435.2 0.0 15 15 10240.0 153600.0 30275.9 60 0.524
10752.0 10240.0 3435.2 0.0 15 15 10240.0 153600.0 30275.9 60 0.524
10752.0 10240.0 3435.2 0.0 15 15 10240.0 153600.0 30558.3 60 0.524
10752.0 10240.0 3435.2 0.0 15 15 10240.0 153600.0 33453.5 60 0.524
gcnewcapacity
新生代容量信息
root@host:/data0# jstat -gcnewcapacity 7 1s 5
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC
174592.0 174592.0 174592.0 57856.0 6656.0 57856.0 6144.0 173568.0 161792.0 76 3
174592.0 174592.0 174592.0 57856.0 6656.0 57856.0 6144.0 173568.0 161792.0 76 3
174592.0 174592.0 174592.0 57856.0 6656.0 57856.0 6144.0 173568.0 161792.0 76 3
174592.0 174592.0 174592.0 57856.0 6656.0 57856.0 6144.0 173568.0 161792.0 76 3
174592.0 174592.0 174592.0 57856.0 6656.0 57856.0 6144.0 173568.0 161792.0 76 3
gcold
老年代及元空间统计信息
root@host:/data0# jstat -gcold 7 1s 5
MC MU CCSC CCSU OC OU YGC FGC FGCT GCT
86016.0 81990.3 10752.0 10019.8 349696.0 48877.6 77 3 0.448 1.054
86016.0 81990.3 10752.0 10019.8 349696.0 48877.6 77 3 0.448 1.054
86016.0 81990.3 10752.0 10019.8 349696.0 48877.6 77 3 0.448 1.054
86016.0 81990.3 10752.0 10019.8 349696.0 48877.6 77 3 0.448 1.054
86016.0 81990.3 10752.0 10019.8 349696.0 48877.6 77 3 0.448 1.054
gcoldcapacity
老年代容量信息
root@host:/data0# jstat -gcoldcapacity 7 1s 5
OGCMN OGCMX OGC OC YGC FGC FGCT GCT
349696.0 349696.0 349696.0 349696.0 77 3 0.448 1.054
349696.0 349696.0 349696.0 349696.0 77 3 0.448 1.054
349696.0 349696.0 349696.0 349696.0 77 3 0.448 1.054
349696.0 349696.0 349696.0 349696.0 77 3 0.448 1.054
349696.0 349696.0 349696.0 349696.0 77 3 0.448 1.054
gcmetacapacity
元空间容量信息
root@host:/data0# jstat -gcmetacapacity 7 1s 5
MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC FGCT GCT
0.0 1124352.0 86016.0 0.0 1048576.0 10752.0 75 3 0.448 1.045
0.0 1124352.0 86016.0 0.0 1048576.0 10752.0 75 3 0.448 1.045
0.0 1124352.0 86016.0 0.0 1048576.0 10752.0 75 3 0.448 1.045
0.0 1124352.0 86016.0 0.0 1048576.0 10752.0 75 3 0.448 1.045
0.0 1124352.0 86016.0 0.0 1048576.0 10752.0 75 3 0.448 1.045
printcompilation
TODO