尽管某些监控工具,如:jvisualvm,可以实时提供垃圾收集图表和指标,但它们并没有提供GC行为完整的详细信息,GC日志是研究垃圾收集行为的最佳信息来源。
启用GC日志
可以通过指定以下JVM参数来启用GC日志:
Java 8及以下版本
-XX:+PrintGCDetails -Xloggc:<gc-log-file-path>
Example:
-XX:+PrintGCDetails -Xloggc:/opt/tmp/myapp-gc.log
Java 9及以上版本
-Xlog:gc*:file=<gc-log-file-path>
Example:
-Xlog:gc*:file=/opt/tmp/myapp-gc.log
注意事项
一般需要观察24小时的GC日志,这样就会同时看到高流量和低流量的情况。
建议从生产环境中收集GC日志,因为垃圾收集行为受流量模式的影响很大,在测试环境中很难模拟生产流量。
我们进行2次测试:
基线测试——使用JMeter工具在没有启用垃圾收集GC日志的情况下运行应用程序20分钟,同时有200个并发用户。
GC日志启用测试——使用相同的JMeter脚本运行应用程序并启用垃圾收集GC日志,持续时间为20分钟,同时有200个并发用户。
对比结果如下:
如图所示,CPU和内存消耗没有明显差异,同样,平均响应和事务吞吐量也没有明显差异,通过实验可以看出,GC日志在生产服务器中增加的开销可以忽略不计。
分析工具
捕获GC日志后,可以使用以下免费工具之一来分析GC日志:
1.GCeasy
3.HP Jmeter
4.Garbage Cat
评论