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

时间:2013-10-09 13:56:54

标签: java logging garbage-collection jvm-arguments

我使用这个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 个答案:

答案 0 :(得分:15)

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

raw_input()

require_once($yii); $app = Yii::createWebApplication($config); Yii::app()->setTimeZone("UTC"); $app->run(); 将被java替换为时间戳(有关java -Xloggc:gc-%t.log ...(rest of your line)... 支持的信息和其他格式,请参阅https://bugs.openjdk.java.net/browse/JDK-6950794

答案 1 :(得分:5)

这里的问题相同,我通过在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)。