本文主要介绍了GC日志分析工具对各种JDK类型,JDK版本,GC类型和JVM参数的支持情况。
本文中“支持”是指这个日志可正常解析并且其打印内容会被工具分析,“忽略”是指日志可正常解析但其打印的内容会被忽略,“不支持”是指使用后可能引起工具解析异常或结果错误。
支持的JDK类型
本工具只支持OpenJDK及其下游发行版产生的GC日志。
支持的JDK版本
支持Java 8,11,17,21的GC日志。其他版本的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版本,日志打印都必须符合以下要求:
至少打开了一个打印日志时间相关的参数。
不要把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日志内容,其他更详细的日志将会被忽略。