【问题标题】:How to redirect verbose garbage collection output to a file?如何将详细的垃圾收集输出重定向到文件?
【发布时间】:2010-11-12 19:06:48
【问题描述】:

如何将详细垃圾回收输出重定向到文件? Sun 的网站显示了一个适用于 Unix 的示例,但它不适用于 Windows。

【问题讨论】:

    标签: garbage-collection java jdk1.5


    【解决方案1】:

    来自java -X的输出:

    -Xloggc: 将 GC 状态记录到带有时间戳的文件中

    记录在案的here

    -Xloggc:文件名

    设置详细的 GC 事件信息应重定向到的文件以进行日志记录。写入此文件的信息类似于-verbose:gc 的输出,其中包含自每个记录事件之前的第一个 GC 事件以来经过的时间。 -Xloggc 选项覆盖 -verbose:gc 如果两者都使用相同的 java 命令。

    例子:

     -Xloggc:garbage-collection.log

    所以输出看起来像这样:

    0.590:[GC 896K->278K(5056K),0.0096650 秒] 0.906:[GC 1174K->774K(5056K),0.0106856 秒] 1.320:[GC 1670K->1009K(5056K),0.0101132 秒] 1.459:[GC 1902K->1055K(5056K),0.0030196 秒] 1.600:[GC 1951K->1161K(5056K),0.0032375 秒] 1.686:[GC 1805K->1238K(5056K),0.0034732 秒] 1.690:[完整 GC 1238K->1238K(5056K),0.0631661 秒] 1.874:[GC 62133K->61257K(65060K),0.0014464 秒]

    【讨论】:

    • java --Xloggc:firstgen.log -Xloggc:secondgen.log 顺便说一句似乎不起作用。
    • 另外,这并没有像我预期的那样增加输出。使用这些参数后没有其他详细信息:-Xloggc:gc.log -XX:-PrintGCDetails
    • "-XX:+PrintGCDetails" 似乎适用于 -Xloggc。我不知道为什么 Sun 页面有 - 而不是 +。
    • 那行得通。谢谢!现在,我使用这些选项: set JAVA_OPTS=%JAVA_OPTS% -Xloggc:logs\gc.log -XX:+PrintGCDetails -XX:MaxPermSize=128m
    【解决方案2】:

    如果您还想将输出通过管道传输到单独的文件,您可以这样做:

    Sun JVM 上:

    -Xloggc:C:\whereever\jvm.log -verbose:gc -XX:+PrintGCDateStamps
    

    IBM JVM 上:

    -Xverbosegclog:C:\whereever\jvm.log 
    

    【讨论】:

    • 如果使用-Xloggc,则不需要-verbose:gc。
    【解决方案3】:

    要补充以上答案,有一篇很好的文章:Patrick Peschlow 的Useful JVM Flags – Part 8 (GC Logging)

    摘录:

    标志 -XX:+PrintGC(或别名 -verbose:gc)激活“简单”GC 日志记录模式

    默认情况下,GC 日志写入标准输出。使用 -Xloggc:<file> 我们可以改为指定一个输出文件。请注意,此标志也会隐式设置 -XX:+PrintGC-XX:+PrintGCTimeStamps

    如果我们使用 -XX:+PrintGCDetails 而不是-XX:+PrintGC,我们将激活“详细” GC 日志记录模式,该模式因所使用的 GC 算法而异。

    使用 -XX:+PrintGCTimeStamps 将反映自 JVM 启动以来经过的实时时间(以秒为单位)的时间戳添加到每一行。

    如果我们指定-XX:+PrintGCDateStamps,每一行都以绝对日期和时间开头。

    【讨论】:

      【解决方案4】:

      Java 9 和统一 JVM 日志记录

      JEP 158 为 JVM 的所有组件引入了一个通用的日志系统,它将改变(并且 IMO 简化)日志与 GC 的工作方式。 JEP 158 添加了一个新的命令行选项来控制来自 JVM 的所有组件的日志记录:

      -Xlog
      

      例如,以下选项:

      -Xlog:gc
      

      将使用info 级别将带有gc 标记的消息记录到stdout。或者这个:

      -Xlog:gc=debug:file=gc.txt:none
      

      会使用debug 级别将带有gc 标记的消息记录到一个名为gc.txt 的文件中,并且没有任何修饰。如需更详细的讨论,您可以查看JEP 页面中的示例。

      【讨论】:

      • 对于 JDK 16,如果您使用旧的 -Xloggc 而不是 -Xlog:gc:...,您甚至会收到警告
      • 如何将日志附加到现有文件?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多