如果我们将文件移到写入日志的位置,如何滚动GC日志



我已经配置jvm gc日志写入文件:

"-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:${LOG_DIR}/myGCLogs.gc"

当应用程序启动时,如果在启动过程中出现异常,我需要在备份文件夹中捕获日志并刷新GC日志。我所做的是将文件从LOG_DIR移到LOG_BACKUP_DIR,然后创建一个新的myGCLogs。gc文件。在此之后,我不再看到日志被写入文件。我必须重新启动我的服务,然后我看到日志再次写入。

这种情况有什么解决方案吗?我能否以某种方式滚动GC日志,以便它再次开始写入新文件而无需重新启动服务?这不是确切的场景,但我尽可能多地举例说明。如果需要,我可以提供更多的细节。

编辑:我可以尝试围绕这部分工作,我不移动日志文件,如果我必须回滚。但是对于第二部分,当一切都成功时,我需要将所有日志移动到我们附加到VM的新卷中以持久化日志。由于这现在是一个不同的文件系统,移动应用程序在原始文件系统上启动时打开的实际文件,将停止写GC日志,直到重新启动。我一直在寻找某种类型的日志轮换,一旦我们都设置好了,那么新的GC日志现在就可以在新的文件系统上写入,而不必重新启动。我试着添加:

-XX:+UseGCLogFileRotation

到我的配置,然后尝试:

jcmd <PID> GC.rotate_log

但这对我不起作用。我得到这个错误:

Target VM does not support GC log file rotation.

p。我正在EC2实例上运行此程序。

找到答案了。我必须配置所有这3个标志:

-XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles
-XX:GCLogFileSize

之后,运行命令:

jcmd <PID> GC.rotate_log

,它实际上在日志上滚动。

最新更新