【问题标题】:GC log rotation data lose on application restartGC 日志轮换数据在应用程序重新启动时丢失
【发布时间】:2013-10-09 13:56:53
【问题描述】:

我使用这个 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,因此丢失。

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

提前致谢!

【问题讨论】:

    标签: java logging garbage-collection jvm-arguments


    【解决方案1】:

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

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

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

    【讨论】:

    • 我最喜欢的问题解决方案,因为它也适用于属性文件(例如 wrapper.conf)。谢谢!
    • 当我对此进行测试时,gc_%t.log 模式的文件看起来像:gc_2016-12-06_16-46-30.log.0.current 这与您链接的文档相矛盾:%t - date stamp when log file is created (format: YYYY-MM-DD)
    【解决方案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)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-05
      • 1970-01-01
      • 2011-06-06
      • 2016-09-18
      • 1970-01-01
      • 2015-04-30
      • 1970-01-01
      相关资源
      最近更新 更多