支持的GC日志格式

本文主要介绍了GC日志分析工具对各种JDK类型,JDK版本,GC类型和JVM参数的支持情况。

说明

本文中“支持”是指这个日志可正常解析并且其打印内容会被工具分析,“忽略”是指日志可正常解析但其打印的内容会被忽略,“不支持”是指使用后可能引起工具解析异常或结果错误。

支持的JDK类型

本工具只支持OpenJDK及其下游发行版产生的GC日志。

支持的JDK版本

支持Java 8,11,17,21GC日志。其他版本的JDK由于不是长期支持版本,不保证能够正常解析。

支持的GC类型

GC类型

对应的JVM参数

支持情况

Serial GC

-XX:+UseSerialGC

支持。

Parallel GC

-XX:+UseParallelGC

支持。

CMS GC

-XX:+UseConcMarkSweepGC

支持。

G1 GC

-XX:+UseG1GC

支持。

Shenandoah GC

-XX:+UseShenandoahGC

不支持。

不分代ZGC

-XX:+UseZGC

(JDK21后 -XX:-ZGenerational)

支持。

分代ZGC

-XX:+UseZGC

-XX:+ZGenerational

不支持

Epsilon GC

-XX:+UseEpsilonGC

不支持。

支持的JVM参数

无论是哪个JDK版本,日志打印都必须符合以下要求:

  1. 至少打开了一个打印日志时间相关的参数。

  2. 不要把GC日志打印到stdout里,stdout可能会混杂其它日志干扰工具解析。

JDK8

多数情况下推荐使用的GC日志打印参数是-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log,其它功能可自行按需开启。

具体的参数支持情况:

参数

支持情况

更多

PrintGCDetails

支持。

PrintGC

支持。

推荐使用:

-XX:+PrintGCDetails

PrintGCDateStamps

PrintGCDateStamps

PrintGCTimeStamps至少要开启一个,否则不支持。

推荐使用:

-XX:+PrintGCDateStamps

PrintGCTimeStamps

PrintGCDateStamps

PrintGCTimeStamps至少要开启一个,否则不支持。

推荐使用:

-XX:+PrintGCDateStamps

verbose:gc

支持。

推荐使用:

  • -XX:+PrintGCDetails

  • -XX:+PrintGCDateStamps

Xlog:gc

必须设置此参数。

ATP不支持从stdout里分析GC日志。

PrintGCCause

支持,且不支持关闭此参数。

推荐保持默认即可。

PrintGCID

支持。

UseGCLogFileRotation

当前工具只支持单个日志文件的分析,不支持把多个rotateGC日志合并上传分析。

其他未提到的参数的输出内容都会被忽略。

JDK9及以上

JDK9时整个JDK的日志打印系统被完全重构,称为Unified Logging,具体用法可以参考Oracle官方文档。设置GC日志打印参数时只需满足以上两点条件都能正常解析,多数情况下推荐使用的GC日志打印参数是-Xlog:gc*:gc.log:time,其他功能可自行按需开启。

ATP当前仅支持分析-Xlog:gc*或-Xlog:gc输出的GC日志内容,其他更详细的日志将会被忽略。