如何将详细垃圾收集输出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页面中检出示例。