什么是垃圾回收日志?如何启用并分析?

与大多数工程师的想法不同,垃圾回收功能对于程序有着深远的影响。为了优化内存和垃圾回收设置,同时解决与内存相关的问题,垃圾回收日志的分析工作必不可少。

启用 GC 日志

您可在应用程序启动时通过传递下方提到的系统属性来启用 GC 日志记录功能

Java 8 及之前版本:

JDK 8 及之前所有版本的 Java 都支持下方的系统属性。

-XX:+PrintGCDetails -Xloggc:<gc-log-file-path>

示例:

-XX:+PrintGCDetails -Xloggc:/opt/tmp/myapp-gc.log

Java 9 及之后版本:

JDK 9 及之后所有版本的 Java 都支持下方的系统属性。

-Xlog:gc*:file=<gc-log-file-path>

示例:

-Xlog:gc*:file=/opt/tmp/myapp-gc.log

如何分析 GC 日志?

以下是传递上述系统属性时生成的 GC 日志示例:

GC 日志中包含丰富的信息。但是,真正了解 GC 日志并不是一件容易的事。我们找不到对 GC 日志格式做出足够解释说明的文档。最重要的是,GC 日志格式也不规范。其会因 JVM 供应商(Oracle、IBM、HP、Azul…)、Java 版本(1.4、5、6、7、8、9)、GC 算法(串行、并行、CMS、G1、Shenandoah)、传递的 GC 系统属性(-XX:+PrintGC、-XX:+PrintGCDetails、-XX:+PrintGCDateStamps、-XX:+Printtheapatgc…)而异。根据这样的排列组合,GC 日志格式很轻松就会出现 60+ 种不同的变化。

因此在分析 GC 日志时,我们强烈建议使用 GC 日志分析工具,比如 GCeasyHPJmeter。此类工具会解析 GC 日志并生成不错的数据可视化图形,并且给出包含关键性能指标和其他一些实用指标的报告。

这里有一个由 GCeasy 工具生成的示例 GC 日志分析报告

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

Blog at WordPress.com.

Up ↑

%d bloggers like this: