如何将详细垃圾收集输出redirect到文件?

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

java -X的输出:

     -Xloggc:<文件>将GC状态logging到带有时间戳的文件

logging在这里 :

-Xloggc: 文件名

设置详细GC事件信息应该redirect到日志的文件。 写入此文件的信息与自-verbose:gc的输出与自每个logging的事件之前的第一个GC事件之后所经过的时间类似。 -Xloggc选项将覆盖-verbose:gc如果两者都使用相同的java命令。

例:

  -Xloggc:垃圾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秒]

如果您还想将输出传送到单独的文件,则可以执行以下操作:

Sun JVM上:

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

IBM JVM上:

 -Xverbosegclog:C:\whereever\jvm.log 

添加到上面的答案,有一个很好的文章: 有用的JVM标志 – 第8部分(GClogging)通过Patrick Peschlow。

一个简短的摘录:

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

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

如果我们使用-XX:+PrintGCDetails而不是-XX:+PrintGC ,则激活“详细的”GClogging模式,这取决于所使用的GCalgorithm。

使用-XX:+PrintGCTimeStamps反映从JVM启动添加到每一行以来的实时传递时间戳。

如果我们指定-XX:+PrintGCDateStamps每行都以绝对date和时间开始。

Java 9和统一的JVM日志logging

JEP 158为JVM的所有组件引入了一个通用的日志logging系统,它将改变(以及简化IMO)日志logging如何与GC协同工作。 JEP 158添加了一个新的命令行选项来控制来自JVM所有组件的日志logging:

 -Xlog 

例如,以下选项:

 -Xlog:gc 

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

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

会使用debug级别将使用gc标签标记的消息logging到没有装饰的名为gc.txt的文件中。 有关更详细的讨论,可以在JEP页面中检出示例。