本文主要介紹了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日志內容,其他更詳細的日志將會被忽略。