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

dja*_*fan 68 java garbage-collection jdk1.5

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

Mic*_*ers 90

从输出java -X:

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

记录在这里:

-Xloggc:filename

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

例:

    -Xloggc:garbage-collection.log

所以输出看起来像这样:

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]

  • "-XX:+ PrintGCDetails"似乎与-Xloggc一起使用.我不知道为什么Sun页面有 - 而不是+. (5认同)

Mar*_*tti 37

如果另外要将输出通过管道传输到单独的文件,则可以执行以下操作:

Sun JVM上:

-Xloggc:C:\whereever\jvm.log -verbose:gc -XX:+PrintGCDateStamps
Run Code Online (Sandbox Code Playgroud)

IBM JVM上:

-Xverbosegclog:C:\whereever\jvm.log 
Run Code Online (Sandbox Code Playgroud)

  • 如果使用-Xloggc,则不需要-verbose:gc. (5认同)

Ali*_*ani 12

Java 9 和统一的 JVM 日志记录

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

-Xlog
Run Code Online (Sandbox Code Playgroud)

例如,以下选项:

-Xlog:gc
Run Code Online (Sandbox Code Playgroud)

gc使用infolevel to记录用tag 标记的消息stdout。或者这个:

-Xlog:gc=debug:file=gc.txt:none
Run Code Online (Sandbox Code Playgroud)

会将gc使用debuglevel标记为tag 的消息记录到一个gc.txt没有装饰的文件中。有关更详细的讨论,您可以查看JEP页面中的示例。

  • 在 JDK 16 中,如果您使用旧的“-Xloggc”而不是“-Xlog:gc:...”,您甚至会收到警告 (2认同)

184*_*615 8

为了增加上述答案,有一篇很好的文章:有用的JVM标志 - 第8部分(GC Logging)作者Patrick Peschlow.

简短摘录:

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

默认情况下,GC日志将写入stdout.随着-Xloggc:<file>我们可以改为指定输出文件.请注意,这个标志隐式设置-XX:+PrintGC,并-XX:+PrintGCTimeStamps为好.

如果我们使用-XX:+PrintGCDetails而不是-XX:+PrintGC,我们激活"详细"GC记录模式,这取决于所使用的GC算法.

使用-XX:+PrintGCTimeStamps时间戳反映自JVM开始添加到每一行以来以秒为单位的实际时间.

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