java gc日志文件ROTATING

文章介绍了两种防止GC日志在应用程序重启时被覆盖的策略:1)通过添加时间戳到日志文件名避免文件重写;2)使用GC日志轮换来管理日志文件,限制文件数量和大小。这两种方法都有其优点和潜在问题,如文件大小增长和日志混淆。对于日志分析工具,可能需要上传多个日志文件。
摘要由CSDN通过智能技术生成

gc日志是优化应用程序性能和解决内存问题的重要工具。通过传递“-Xloggc”JVM 参数,可以在特定文件路径中生成垃圾收集日志。

-Xloggc:/home/GCEASY/gc.log

使用这种方法配置gc文件:每当应用程序重新启动时,旧的 GC 日志文件将被新的 GC 日志文件覆盖,因为文件路径相同(即 /home/GCEASY/gc.log)。 因此,您将无法分析在重新启动应用程序之前存在的旧 GC 日志。特别是当应用程序崩溃或出现某些性能问题时,您需要旧的 GC 日志进行分析。

缓解这一挑战的一个简单策略是将新的 GC 日志内容写入不同的文件位置。在本文中,与您分享了 2 种不同的策略: 

1、Suffix timestamp to GC Log file

如果您可以在 GC 日志文件后缀 JVM 重新启动的时间戳,那么 GC 日志文件位置将变得唯一。然后新的 GC 日志将不会覆盖旧的 GC 日志。可以通过如下图实现:

"-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/home/GCEASY/gc-%t.log"

‘%t’ 将时间戳作为 gc 日志文件的后缀,格式为:‘YYYY-MM-DD_HH-MM-SS’。因此生成的 GC 日志文件名将开始类似于:‘gc-2019-01-29_20-41-47.log’

这种方式也有一个小小问题:文件大小增长问题

假设如果您不重新启动 JVM,那么 GC 日志文件的大小可能会增长到巨大的大小。因为在这个策略中,新的 GC 日志文件只会在您重新启动 JVM 时创建。但在我看来这不是主要问题,因为一个 GC 事件只占用几个字节。因此 GC 日志文件大小不会增长到超出大多数应用程序的可管理点。 

2、Use -XX:+UseGCLogFileRotation

"-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/home/GCEASY/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=2M"

当传递“-XX:-UseGCLogFileRotation”时,JVM 本身会启用 GC 日志轮换。

  • '-XX:NumberOfGClogFiles' 设置旋转日志时使用的文件数,必须 >= 1。旋转的日志文件将使用以下命名方案,<filename>.0, <filename>.1, …, <filename >.n-1。
  • ‘-XX:GCLogFileSize’ 定义日志文件的大小,在该点日志将被轮换,必须 >= 8K

不过这种方式也会有一些小小问题:

1)Losing old GC Logs

假设如果你配置了 -XX:NumberOfGCLogFiles=5 那么在一段时间内,将创建 5 个 GC 日志文件:

gc.log.0 — oldest GC Log content
gc.log.1
gc.log.2
gc.log.3
gc.log.4 — latest GC Log content

最近的 GC 日志内容将写入“gc.log.4”,旧的 GC 日志内容将出现在“gc.log.0”中。

当应用程序开始生成比配置的“-XX:NumberOfGCLogFiles”更多的 GC 日志(在本例中为 5)时,gc.log.0 中的旧 GC 日志内容将被删除。新的 GC 事件将写入 gc.log.0。这意味着您最终将不会拥有所有生成的 GC 日志。

2)Mixed-up GC Logs

假设应用程序创建了 5 个 gc 日志文件,即

gc.log.0
gc.log.1
gc.log.2
gc.log.3
gc.log.4

然后,假设您正在重新启动应用程序。现在新的 GC 日志将写入 gc.log.0 文件,旧的 GC 日志内容将出现在 gc.log.1、gc.log.2、gc.log.3、gc.log.4 中,即

gc.log.0 — GC log file content after restart
gc.log.1 — GC log file content before restart
gc.log.2 — GC log file content before restart
gc.log.3 — GC log file content before restart
gc.log.4 — GC log file content before restart

因此,您的新 GC 日志内容会与旧 GC 日志混淆。为了缓解此问题,您可能必须在重新启动应用程序之前将所有旧的 GC 日志移动到不同的文件夹。

3)通过工具分析日志:

现在要使用 GC 工具(例如(gceasy.io、GCViewer…))分析 GC 日志文件,您必须上传多个 GC 日志文件,而不是只上传一个 GC 日志文件。

ROTATING GC LOG FILES – GC easy – Universal Java GC Log Analyser

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值