GC 日志轮换数据在应用程序重新启动时丢失

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

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

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

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

提前致谢!


答案 1

你也可以使用java自己的时间戳:

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

%t将被 java 替换为时间戳(请参阅 https://bugs.openjdk.java.net/browse/JDK-6950794 以获取-Xloggc


答案 2

同样的问题在这里,我通过将时间戳添加到gc日志文件名中来修复它,如下所示(在本例中为/etc/default/tomcat7):

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

这样,您可以在重新启动后保留gc日志,因为jvm以不同的时间戳开始,并且不会覆盖之前写入的gc.logs。您需要不时手动清理这些文件(cronjob)。