支持的GC日志格式
本文主要介绍了GC日志分析工具对各种JDK类型,JDK版本,GC类型和JVM参数的支持情况。
本文中“支持”是指这个日志可正常解析并且其打印内容会被工具分析,“忽略”是指日志可正常解析但其打印的内容会被忽略,“不支持”是指使用后可能引起工具解析异常或结果错误。
支持的JDK类型
本工具只支持OpenJDK及其下游发行版产生的GC日志。
支持的JDK版本
支持Java 8,11和17的GC日志。其它版本的JDK由于不是长期支持版本,不保证能够正常解析。
支持的GC类型
GC类型 | 对应的JVM参数 | 支持情况 |
Serial GC | UseSerialGC | 支持。 |
Parallel GC | UseParallelGC | 支持。 |
CMS GC | UseConcMarkSweepGC | 支持。 |
G1 GC | UseG1GC | 支持。 |
Shenandoah GC | UseShenandoahGC | 不支持。 |
ZGC | UseZGC | 支持。 |
Epsilon GC | UseEpsilonGC | 不支持。 |
支持的JVM参数
无论是哪个JDK版本,日志打印都必须符合以下要求:
至少打开了一个打印日志时间相关的参数。
不要把GC日志打印到stdout里,stdout可能会混杂其它日志干扰工具解析。
JDK8
多数情况下推荐使用的GC日志打印参数是-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log
,其它功能可自行按需开启。
具体的参数支持情况:
参数 | 支持情况 | 更多 |
PrintGCDetails | 支持。 | |
PrintGC | 支持。 | 推荐使用:
|
PrintGCDateStamps | PrintGCDateStamps和 PrintGCTimeStamps至少要开启一个,否则不支持。 | 推荐使用:
|
PrintGCTimeStamps | PrintGCDateStamps和 PrintGCTimeStamps至少要开启一个,否则不支持。 | 推荐使用:
|
verbose:gc | 支持。 | 推荐使用:
|
Xlog:gc | 必须设置此参数。 | ATP不支持从stdout里分析GC日志。 |
PrintGCCause | 支持,且不支持关闭此参数。 | 推荐保持默认即可。 |
PrintGCID | 支持。 | |
UseGCLogFileRotation | 当前工具只支持单个日志文件的分析,不支持把多个rotate的GC日志合并上传分析。 |
其它未提到的参数的输出内容都会被忽略。
JDK9及以上
JDK9时整个JDK的日志打印系统被完全重构,称为Unified Logging,具体用法可以参考Oracle官方文档。设置GC日志打印参数时只需满足以上两点条件都能正常解析,多数情况下推荐使用的GC日志打印参数是-Xlog:gc*:gc.log:time
,其他功能可自行按需开启。
ATP当前仅支持分析-Xlog:gc*或-Xlog:gc输出的GC日志内容,其他更详细的日志将会被忽略。