GC日志是一种很重要的日志,它虽然无法定位出很详细的内容,但反映出JVM整体的运行状况。以生产环境为例:在出现严重性能问题时,整个系统卡住了,我发现1分钟之内full gc是25次,当把问题解决之后,1分钟的full gc只有4次。
如果在系统使用高峰期的时候,出现full gc的非常多,如果系统内存溢出,那分析DUMP文件就可以了。如果没有内存溢出的日志,就需要dump JVM。gc 日志就像一个风向标,引导我们做事情。
分析GC日志,之前使用过GChisto、GCLogViewer-0.3-win,效果都不甚理想。最近发现一款Garbage Collection and Memory Visualizer (GCMV),符合我的习惯。
有两种安装方法:
1. eclipse下安装,打开帮助-->eclipse marketplace 搜索GCMV ,安装后切换到GCMV的视图,通过文件-->装入文件 选择gc日志,可以出结果。
2. 安装IBM Support Assistant workbeach 4.0,可以选择JVM插件。不过在我的机器上有问题,选择插件的时候总报空指针的错null point,导致选择不了插件,无法进行下一步。
分析的结果非常丰富,各个维度,有比较关心的基线值是:
全部回收 | 99 |
分配失败触发的回收数量 | 8273 |
回收之间的平均时间间隔 (毫秒) | 1554666 |
垃圾回收暂停所用时间的比例 (%) | 0.3 |
垃圾回收率 (MB/分钟) | 5237 |
平均垃圾回收暂停时间 (毫秒) | 1459 |
强制回收计数 | 0 |
非暂停时间比例 (%) | 99.7 |
摘要:
非暂停时间比例 (%) = 99.7
分配失败触发的回收数量 = 8273
回收之间的平均时间间隔 (毫秒) = 1554666.3232323232
垃圾回收率 (MB/分钟) = 5236.80405700525
垃圾回收暂停所用时间的比例 (%) = 0.3
平均垃圾回收暂停时间 (毫秒) = 1458.8226565656576
强制回收计数 = 0
全部回收 = 99