JDK提供了Jstat等命令,用于监控JVM的运行状态,除了Jstat外,还有:
jps:查询系统内的java进程,其实和ps一样;
jmap:导出JVM运行时的内存快照;
jhat:搭建一个http服务,并指定jmap导出的jvm内存映像,展示jvm内存映像,用于分析jvm内存,找出内存泄漏的原因;
jstack:导出jvm的线程堆栈,导出后,可以用jvisual进行可视化分析,找出阻塞的线程;
本文主要介绍jstat命令,jstat命令可以根据指定的参数,打印出jvm内存使用统计信息
可选的参数如上,经常用的观察堆内存,分析内存泄漏的命令是:
./jstat.exe -gcutil 167184 1s 按各内存区使用率观察
使用gcutil option参数,167184是使用jps查询出的要观察分析的java进程ID,1s代表1秒钟刷新一次,以便观察内存变化,执行结果如下:
字段说明:
S0:第一个幸存区使用率
S1:第二个幸存区使用率
E:新生代使用率
O:老年代使用率
M:元数据区使用率
CCS:压缩使用率
YGC:年轻代GC次数
YGCT:年轻代gc时间
FGC:老年代GC次数
FGCT:老年代GC时间
GCT:总GC时间
./jstat.exe -gc 167184 1s 按各内存区容量观察(单位:KB)
字段说明:
S0C:幸存区1容量;
S1C:幸存区2容量;
S0U:幸存区1已使用容量;
S1U:幸存区2已使用容量;
EC:新生代容量
EU:新生代已使用容量;
OC:老年代容量;
OU:老年代已使用容量;
MC:元数据区容量;
MU:元数据区已使用容量;
CCSC:压缩区容量;
CCSU:压缩区已使用容量;
主要介绍经常使用的参数,还有很多参数,有兴趣可以再探索;