应用重启时GC日志轮换数据丢失。

15

我使用这个jvm选项来创建gc日志并启用滚动:

$ java -Xloggc:gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5  XX:GCLogFileSize=128K

然而,当我重新启动我的应用程序时,我遇到了一个问题。重新启动后,第一个日志文件gc.log.0会被覆盖,该文件的数据不会滚动到gc.log.1,因此丢失。

我想知道我是否正确,并且是否有解决方案。

提前致谢!

2个回答

18

您也可以使用Java自己的时间戳来实现:

java -Xloggc:gc-%t.log ...(rest of your line)...

%t将由Java替换为时间戳(有关信息和其他由-Xloggc支持的格式,请参见https://bugs.openjdk.java.net/browse/JDK-6950794


我的最爱解决问题的方法,因为它也适用于属性文件(如wrapper.conf)。谢谢! - dokaspar
当我测试时,模式gc_%t.log的文件看起来像:gc_2016-12-06_16-46-30.log.0.current,这与您链接的文档相矛盾:%t-日志文件创建时的日期戳(格式:YYYY-MM-DD) - joseph

5

我遇到了同样的问题,通过在gc日志文件名后添加时间戳解决了这个问题(在此例中为/etc/default/tomcat7):

DATE=`date +%Y-%m-%d-%H-%M`
JAVA_OPTS="-Xloggc:/var/log/tomcat7/gc-$DATE.log ..."

这样你就可以在 JVM 以不同的时间戳启动并不会覆盖之前写入的 GC 日志后重启时保留你的 GC 日志。但是你需要定期手动清理这些文件(使用 cronjob)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接