JVM Statistics Monitoring Tool,是用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。【性能分析】
命令格式
1
|
jstat [options] VMID [interval] [count] |
参数
[options] : 操作参数,一般使用 -gcutil 查看gc情况
VMID : 本地虚拟机进程ID,即当前运行的java进程号
[interval] : 连续输出的时间间隔,单位为秒或者毫秒
[count] : 连续输出的次数,如果缺省打印无数次
VMID : 本地虚拟机进程ID,即当前运行的java进程号
[interval] : 连续输出的时间间隔,单位为秒或者毫秒
[count] : 连续输出的次数,如果缺省打印无数次
option 参数总览
Option | Displays |
---|---|
class | 类加载的行为统计。Statistics on the behavior of the class loader. |
compiler | HotSpt JIT编译器行为统计。Statistics of the behavior of the HotSpot Just-in-Time compiler. |
gc | 垃圾回收堆的行为统计。Statistics of the behavior of the garbage collected heap. |
gccapacity | 各个垃圾回收代容量(young,old,perm)和他们相应的空间统计。Statistics of the capacities of the generations and their corresponding spaces. |
gcutil | 垃圾回收统计概述(百分比)。Summary of garbage collection statistics. |
gccause | 垃圾收集统计概述(同-gcutil),附加最近两次垃圾回收事件的原因。Summary of garbage collection statistics (same as -gcutil), with the cause of the last and |
gcnew | 新生代行为统计。Statistics of the behavior of the new generation. |
gcnewcapacity | 新生代与其相应的内存空间的统计。Statistics of the sizes of the new generations and its corresponding spaces. |
gcold | 年老代和永生代行为统计。Statistics of the behavior of the old and permanent generations. |
gcoldcapacity | 年老代行为统计。Statistics of the sizes of the old generation. |
gcpermcapacity | 永生代行为统计。Statistics of the sizes of the permanent generation. |
printcompilation | HotSpot编译方法统计。HotSpot compilation method statistics. |
option 参数详解
-class (监视类装载、卸载数量、总空间以及耗费的时间)
1
2
3
4
|
[root@localhost bin] # jstat -class 4513
Loaded Bytes Unloaded Bytes Time 8455 17240.8 0 0.0 15.47 |
Loaded : 加载class的数量
Bytes : class字节大小
Unloaded : 未加载class的数量
Bytes : 未加载class的字节大小
Time : 加载时间
Bytes : class字节大小
Unloaded : 未加载class的数量
Bytes : 未加载class的字节大小
Time : 加载时间
-compiler(输出JIT编译过的方法数量耗时等)
1
2
3
|
[root@localhost bin] # jstat -compiler 4513
Compiled Failed Invalid Time FailedType FailedMethod 1255 0 0 16.47 0 |
Compiled : 编译数量
Failed : 编译失败数量
Invalid : 无效数量
Time : 编译耗时
FailedType : 失败类型
FailedMethod : 失败方法的全限定名
Failed : 编译失败数量
Invalid : 无效数量
Time : 编译耗时
FailedType : 失败类型
FailedMethod : 失败方法的全限定名
-gc(垃圾回收堆的行为统计,常用命令)
1
2
3
|
[root@localhost bin] # jstat -gc 4513
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
52224.0 53248.0 19364.2 0.0 804864.0 74967.7 168448.0 80595.4 52736.0 52628.1 10 0.232 0 0.000 0.232 |
C即Capacity 总容量,U即Used 已使用的容量
S0C : survivor0区的总容量
S1C : survivor1区的总容量
S0U : survivor0区已使用的容量
S1C : survivor1区已使用的容量
EC : Eden区的总容量
EU : Eden区已使用的容量
OC : Old区的总容量
OU : Old区已使用的容量
PC : 当前perm的容量 (KB)
PU : perm的使用 (KB)
YGC : 新生代垃圾回收次数
YGCT : 新生代垃圾回收时间
FGC : 老年代垃圾回收次数
FGCT : 老年代垃圾回收时间
GCT : 垃圾回收总消耗时间
S1C : survivor1区的总容量
S0U : survivor0区已使用的容量
S1C : survivor1区已使用的容量
EC : Eden区的总容量
EU : Eden区已使用的容量
OC : Old区的总容量
OU : Old区已使用的容量
PC : 当前perm的容量 (KB)
PU : perm的使用 (KB)
YGC : 新生代垃圾回收次数
YGCT : 新生代垃圾回收时间
FGC : 老年代垃圾回收次数
FGCT : 老年代垃圾回收时间
GCT : 垃圾回收总消耗时间
1
|
[root@localhost bin] # jstat -gc 4513 2000 2
|
这个命令意思就是每隔2000ms输出4513的gc情况,一共输出2次
-gccapacity(同-gc,还会输出Java堆各区域使用到的最大、最小空间)
1
2
3
|
[root@localhost bin] # jstat -gccapacity 4513
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC PGCMN PGCMX PGC PC YGC FGC
84480.0 1349632.0 913408.0 54272.0 51200.0 502784.0 168448.0 2699264.0 168448.0 168448.0 21504.0 83968.0 51712.0 51712.0 9 0
|
NGCMN : 新生代占用的最小空间
NGCMX : 新生代占用的最大空间
OGCMN : 老年代占用的最小空间
OGCMX : 老年代占用的最大空间
OGC:当前年老代的容量 (KB)
OC:当前年老代的空间 (KB)
PGCMN : perm占用的最小空间
PGCMX : perm占用的最大空间
NGCMX : 新生代占用的最大空间
OGCMN : 老年代占用的最小空间
OGCMX : 老年代占用的最大空间
OGC:当前年老代的容量 (KB)
OC:当前年老代的空间 (KB)
PGCMN : perm占用的最小空间
PGCMX : perm占用的最大空间
-gcutil(同-gc,输出的是已使用空间占总空间的百分比)
1
2
3
|
[root@localhost bin] # jstat -gcutil 4513
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 79.23 38.90 39.92 99.74 9 0.198 0 0.000 0.198
|
-gccause(垃圾收集统计概述(同-gcutil),附加最近两次垃圾回收事件的原因)
1
2
3
|
[root@localhost bin] # jstat -gccause 4513
S0 S1 E O P YGC YGCT FGC FGCT GCT LGCC GCC
0.00 79.23 39.37 39.92 99.74 9 0.198 0 0.000 0.198 Allocation Failure No GC
|
LGCC:最近垃圾回收的原因
GCC:当前垃圾回收的原因
GCC:当前垃圾回收的原因
-gcnew(统计新生代行为)
1
2
3
|
[root@localhost bin] # jstat -gcnew 4513
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
54272.0 51200.0 0.0 40565.8 2 15 54272.0 502784.0 197950.5 9 0.198 |
TT:Tenuring threshold(提升阈值)
MTT:最大的tenuring threshold
DSS:survivor区域大小 (KB)
MTT:最大的tenuring threshold
DSS:survivor区域大小 (KB)
-gcnewcapacity(新生代与其相应的内存空间的统计)
1
2
3
|
[root@localhost bin] # jstat -gcnewcapacity 4513
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC
84480.0 1349632.0 913408.0 449536.0 54272.0 449536.0 51200.0 1348608.0 502784.0 9 0
|
NGC:当前年轻代的容量 (KB)
S0CMX:最大的S0空间 (KB)
S0C:当前S0空间 (KB)
ECMX:最大eden空间 (KB)
EC:当前eden空间 (KB)
S0CMX:最大的S0空间 (KB)
S0C:当前S0空间 (KB)
ECMX:最大eden空间 (KB)
EC:当前eden空间 (KB)
-gcold(统计老年代行为)
1
2
3
|
[root@localhost bin] # jstat -gcold 4513
PC PU OC OU YGC FGC FGCT GCT
51712.0 51575.1 168448.0 67239.6 9 0 0.000 0.198
|
-gcoldcapacity(老年代与其相应的内存空间的统计)
1
2
3
|
[root@localhost bin] # jstat -gcoldcapacity 4513
OGCMN OGCMX OGC OC YGC FGC FGCT GCT
168448.0 2699264.0 168448.0 168448.0 9 0 0.000 0.198
|
-gcpermcapacity(永久代与其相应内存空间的统计)
1
2
3
|
[root@localhost bin] # jstat -gcpermcapacity 4513
PGCMN PGCMX PGC PC YGC FGC FGCT GCT
21504.0 83968.0 51712.0 51712.0 9 0 0.000 0.19
|
-printcompilation(hotspot编译方法统计)
1
2
3
|
[root@localhost bin] # jstat -printcompilation 4513
Compiled Size Type Method 1261 1261 1 java /util/concurrent/ScheduledThreadPoolExecutor $DelayedWorkQueue take
|
Compiled:被执行的编译任务的数量
Size:方法字节码的字节数
Type:编译类型
Method:编译方法的类名和方法名。类名使用"/" 代替 "." 作为空间分隔符. 方法名是给出类的方法名. 格式是一致于HotSpot - XX:+PrintComplation 选项
Size:方法字节码的字节数
Type:编译类型
Method:编译方法的类名和方法名。类名使用"/" 代替 "." 作为空间分隔符. 方法名是给出类的方法名. 格式是一致于HotSpot - XX:+PrintComplation 选项