與大多數(shù)工程師的想法相反,垃圾收集對(duì)應(yīng)用程序的影響更為深遠(yuǎn)。為了優(yōu)化內(nèi)存和垃圾收集設(shè)置并解決與內(nèi)存相關(guān)的問(wèn)題,必須分析垃圾收集日志。
啟用 GC 日志
GC Logging 可以通過(guò)在應(yīng)用程序啟動(dòng)期間傳遞下面提到的系統(tǒng)屬性來(lái)啟用
直到 Java 8:
以下是 JDK 8 之前所有 Java 版本都支持的系統(tǒng)屬性。
-XX:+PrintGCDetails -Xloggc:<gc-log-file-path>
例子:
-XX:+PrintGCDetails -Xloggc:/opt/tmp/myapp-gc.log
從 Java 9:
以下是從 JDK 9 開(kāi)始的所有 Java 版本都支持的系統(tǒng)屬性。
-Xlog:gc*:file=<gc-log-file-path>
例子:
-Xlog:gc*:file=/opt/tmp/myapp-gc.log
如何分析GC日志?
這是傳遞上述系統(tǒng)屬性時(shí)生成的示例 GC 日志:
GC日志信息豐富,但是理解GC日志并不容易。沒(méi)有足夠的文檔來(lái)解釋 GC 日志格式。最重要的是,GC 日志格式?jīng)]有標(biāo)準(zhǔn)化。它因 JVM 供應(yīng)商(Oracle、IBM、HP、Azul 等)、Java 版本(1.4、5、6、7、8、9)、GC 算法(串行、并行、CMS、G1、Shenandoah)、GC 系統(tǒng)屬性而異你通過(guò) (?-XX:+PrintGC
?, ?-XX:+PrintGCDetails
?,? -XX:+PrintGCDateStamps
?, ?-XX:+PrintHeapAtGC
? ...)。基于這種排列組合,很容易就有 60 多種不同的 GC 日志格式。
因此,在分析GC日志時(shí),強(qiáng)烈推薦使用?GCeasy
?、?HPJmeter
?等GC日志分析工具。這些工具解析 GC 日志并生成出色的數(shù)據(jù)圖形可視化、報(bào)告關(guān)鍵性能指標(biāo)和其他一些有用的指標(biāo)。