JVM故障分析及性能优化系列文章
前面提到了一个使用jstack的shell脚本,通过命令可以很快地定位到指定线程对应的堆栈信息。
使用jstat命令
当服务器CPU100%的时候,通过定位占用资源最大的线程定位到 VM Thread:
"VM Thread" prio=10 tid=0x00007fbea80d3800 nid=0x5e9 runnable
这个时候需要使用 jstat -gc 命令查看gc的信息,显示结果如下:
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
64.0 64.0 0.0 0.0 332992.0 0.0 666304.0 73192.5 83968.0 83967.9 6893 17.576 6882 2705.923 2723.499
结果中每个项目的含义可以参考官方对jstat的文档,简单翻译如下:
S0C: Young Generation第一个survivor space的内存大小 (kB).
S1C: Young Generation第二个survivor space的内存大小 (kB).
S0U: Young Generation第一个Survivor space当前已使用的内存大小 (kB).
S1U: Young Generation第二个Survivor space当前已经使用的内存大小 (kB).
EC: Young Generation中eden space的内存大小 (kB).
EU: Young Generation中Eden space当前已使用的内存大小 (kB).
OC: Ol