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因此丢失。

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

提前致谢!

4

2 回答 2

18

您还可以为此使用 java 自己的时间戳:

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

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

于 2016-04-03T19:23:31.840 回答
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)。

于 2014-02-17T16:10:51.140 回答