如何将详细垃圾收集输出重定向到文件?

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

128436 次浏览

java -X的输出:

-Xloggc:<file>    log GC status to a file with time stamps

给你文件:

- 谢谢

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

例如:

    -Xloggc:garbage-collection.log

So the output looks something like this:

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

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

Sun JVM:

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

IBM JVM:

-Xverbosegclog:C:\whereever\jvm.log

为了补充上面的答案,还有一篇好文章: 帕特里克 · 佩施洛(Patrick Peschlow)的 有用的 JVM 标志-第8部分(GC 日志记录)

摘要:

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

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

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

使用 -XX:+PrintGCTimeStamps时间戳,反映自从 JVM start 添加到每一行以来以秒为单位传递的实际时间。

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

Java9与统一 JVM 日志记录

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

-Xlog

例如,以下选项:

-Xlog:gc

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

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

将使用 debug级别将带有 gc标记的消息记录到一个名为 gc.txt的文件中,不进行任何修饰。要了解更详细的讨论,您可以查看 JEP页面中的示例。