Java中什么是垃圾收集日志?如何启用和分析?

级高速公路ETC识别机携带者 2021-09-07 09:39:22 浏览数 (2419)
反馈

与大多数工程师的想法相反,垃圾收集对应用程序的影响更为深远。为了优化内存和垃圾收集设置并解决与内存相关的问题,必须分析垃圾收集日志。

启用 GC 日志

GC Logging 可以通过在应用程序启动期间传递下面提到的系统属性来启用

直到 Java 8:

以下是 JDK 8 之前所有 Java 版本都支持的系统属性。

-XX:+PrintGCDetails -Xloggc:<gc-log-file-path>

例子:

-XX:+PrintGCDetails -Xloggc:/opt/tmp/myapp-gc.log

从 Java 9:

以下是从 JDK 9 开始的所有 Java 版本都支持的系统属性。

-Xlog:gc*:file=<gc-log-file-path>

例子:

-Xlog:gc*:file=/opt/tmp/myapp-gc.log

如何分析GC日志?

这是传递上述系统属性时生成的示例 GC 日志:

什么是GC

GC日志信息丰富,但是理解GC日志并不容易。没有足够的文档来解释 GC 日志格式。最重要的是,GC 日志格式没有标准化。它因 JVM 供应商(Oracle、IBM、HP、Azul 等)、Java 版本(1.4、5、6、7、8、9)、GC 算法(串行、并行、CMS、G1、Shenandoah)、GC 系统属性而异你通过 (​-XX:+PrintGC​, ​-XX:+PrintGCDetails​,​ -XX:+PrintGCDateStamps​, ​-XX:+PrintHeapAtGC​ ...)。基于这种排列组合,很容易就有 60 多种不同的 GC 日志格式。

因此,在分析GC日志时,强烈推荐使用​GCeasy​、​HPJmeter​等GC日志分析工具。这些工具解析 GC 日志并生成出色的数据图形可视化、报告关键性能指标和其他一些有用的指标。


0 人点赞