jstat --- JVM的统计监测工具 java gc 内存使用 故障排查
Jstat名称:Java Virtual Machine statistics monitoring tool
jstat 官方文档:https://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html
1. jstat命令简介
jstat 命令可以查看 堆内存 及 非堆内存 各部分的使用量,以及 加载类 的数量。
命令的格式如下:
jstat [-命令选项] [-t] [-h lines] [vmid] [间隔时间/毫秒] [查询次数]
-option: 多滴很,见下面使用列表,或者看官网(-statOption)
-t: 可以在打印的列加上Timestamp列,用于显示系统运行的时间
-h: 可以在指定输出多少行以后输出一次表头
vmid: Virtual Machine ID( 进程的 pid)
interval: 打印间隔 ,单位为毫秒; 默认1次
count: 用于指定输出多少次记录,缺省则会一直打印
2. 使用详情列表
【以下统计中未标明的:空间单位: 都是KB ; 时间单位: 都是 s 秒】
特别说明以下含义:
YGCT:从应用程序启动到采样时年轻代中 gc 所用总时间(s)
FGCT:从应用程序启动到采样时 old 代 gc 所用总时间(s)
GCT:从应用程序启动到采样时 gc 用的总时间(s)
1>类加载统计
官网:https://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html#class_option
命令:
jstat -class 19570 1000
19570 :为java 进程id
1000:每隔 1s 打印一次
结果:
解析:
Loaded:加载class的数量
Bytes:所占用空间大小
Unloaded:未加载数量
Bytes:未加载占用空间
Time:时间
2>编译统计
官网:https://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html#compiler_option
命令:
jstat -compiler 19570 1000
19570 :为java 进程id
1000:每隔 1s 打印一次
结果:
解析:
Compiled:编译数量。
Failed:失败数量
Invalid:不可用数量
Time:时间
FailedType:失败类型
FailedMethod:失败的方法
3>垃圾回收统计查看(常用来查看gc情况)
官网:https://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html#gc_option
命令:
jstat -gc 19570 1000
19570 :为java 进程id
1000:每隔 1s 打印一次
结果:
解析(着重关注红色部分):
S0C:第一个幸存区的大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
4>堆内存(分配的不是使用的)
官网:https://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html#gccapacity_option
命令:
jstat -gccapacity 19570 1000
19570 :为java 进程id
1000:每隔 1s 打印一次
结果:
解析:
NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:当前新生代容量
S0C:第一个幸存区大小
S1C:第二个幸存区的大小
EC:伊甸园区的大小
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:当前老年代大小
OC:当前老年代大小
MCMN:最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:年轻代gc次数
FGC:老年代GC次数
java 应用的内存组成:查看文章
5>新生代垃圾回收统计(yong使用)
官网:https://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html#gcnew_option
命令:
jstat -gcnew 19570 1000
19570 :为java 进程id
1000:每隔 1s 打印一次
结果:
解析:
S0C:第一个幸存区大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
TT:对象在新生代存活的次数
MTT:对象在新生代存活的最大次数
DSS:期望的幸存区大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
6>新生代内存统计
命令:
jstat -gcnewcapacity 19570 1000
19570 :为java 进程id
1000:每隔 1s 打印一次
结果:
解析:
NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:当前新生代容量
S0CMX:最大幸存1区大小
S0C:当前幸存1区大小
S1CMX:最大幸存2区大小
S1C:当前幸存2区大小
ECMX:最大伊甸园区大小
EC:当前伊甸园区大小
YGC:年轻代垃圾回收次数
FGC:老年代回收次数
7>老年代垃圾回收统计(old使用情况)
命令:
jstat -gcold 19570 1000
19570 :为java 进程id
1000:每隔 1s 打印一次
结果:
解析:
MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
OC:老年代大小
OU:老年代使用大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
8>老年代内存统计
命令:
jstat -gcoldcapacity 19570 1000
19570 :为java 进程id
1000:每隔 1s 打印一次
结果:
解析:
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:当前老年代大小
OC:老年代大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
9>JDK7 下 永久代空间统计(非堆内存)
命令:
jstat -gcpermcapacity 19570 1000
19570 :为java 进程id
1000:每隔 1s 打印一次
结果:
解析:
PGCMN:最小永久代容量
PGCMX:最大永久代容量
PGC:当前新生成的永久代空间大小
PC :永久代空间大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
10>JDK8 下 元数据空间统计(meta使用)
命令:
jstat -gcmetacapacity 7172 1000
7172:为java 进程id
1000:每隔 1s 打印一次
结果:
解析:
MCMN: 最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
11>总结垃圾回收统计
命令:
jstat -gcutil 19570 1000
19570 :为java 进程id
1000:每隔 1s 打印一次
结果:
解析:
S0:幸存1区当前使用比例
S1:幸存2区当前使用比例
E:伊甸园区使用比例
O:老年代使用比例
M:元数据区使用比例
CCS:压缩使用比例
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
12>JVM编译方法统计
命令:
jstat -printcompilation 19570
结果:
解析:
Compiled:最近编译方法的数量
Size:最近编译方法的字节码数量
Type:最近编译方法的编译类型。
Method:方法名标识。
共 0 条评论