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


Answers:


92

从输出java -X

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

记录在这里

-Xloggc:文件名

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

例:

    -Xloggc:垃圾收集.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似乎不起作用。
djangofan

另外,这并没有增加输出,正如我所期望的那样。使用以下参数后,没有其他详细信息:-Xloggc:gc.log -XX:-PrintGCDetails
djangofan

6
“ -XX:+ PrintGCDetails”似乎与-Xloggc一起使用。我不知道为什么Sun页面有-而不是+。
迈克尔·迈尔斯

起作用了。谢谢!现在,我使用以下选项:设置JAVA_OPTS =%JAVA_OPTS%-Xloggc:logs \ gc.log -XX:+ PrintGCDetails -XX:MaxPermSize = 128m
djangofan

38

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

Sun JVM上:

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

IBM JVM上:

-Xverbosegclog:C:\whereever\jvm.log 

6
如果使用-Xloggc,则不需要-verbose:gc。
Mirko Ebert

11

Java 9和统一JVM日志记录

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

-Xlog

例如,以下选项:

-Xlog:gc

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

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

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


1
使用JDK 16,如果您使用旧版本-Xloggc而不是-Xlog:gc:...
martin-g

7

要添加到上面的答案中,有一篇很好的文章:Patrick Peschlow撰写的有用的JVM标志–第8部分(GC日志记录)

简短摘录:

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

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

如果使用-XX:+PrintGCDetails代替-XX:+PrintGC,则会激活“详细的” GC日志记录模式,该模式根据所使用的GC算法而有所不同。

随着-XX:+PrintGCTimeStamps时间戳反映,因为JVM开始在几秒钟内通过实时添加到每一行。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.