Java 11 中是否有垃圾回收 JVM 参数的替代方案?

53

在Java 11中,与GC日志记录相关的一些JVM参数不再受支持。如果我们仍然想要使用GC日志记录,是否有替代方法?特别是以下JVM参数:

-Xlog:gc:work/logs/gc.log
-XX:+PrintGCTimeStamps
-XX:+PrintGCDateStamps
-XX:+PrintGCDetails
-XX:+PrintGCApplicationStoppedTime
-XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles
-XX:GCLogFileSize
谢谢。
3个回答

73
你的<arguments, current mapping, reasons> 列表如下:
-XX:+PrintGCTimeStamps    
-XX:+PrintGCDateStamps    ==>  decoration options
                               -Xlog:::time,level,tags

-XX:+PrintGCDetails       ==>  -Xlog:gc*

-XX:+PrintGCApplicationStoppedTime ==> -Xlog:safepoint

注意: PrintGCApplicationConcurrentTimePrintGCApplicationStoppedTime 被记录在同一个标签上,新的日志中它们没有被分开。



-XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles    
-XX:GCLogFileSize          ==>  output options
                                -Xlog::::filecount=5,filesize=1024

框架处理的位需要微调。

参考: 我所参考的文档,并要求您按照此迁移详细信息进行操作。


3
文件大小以字节为单位,除非你添加一个K,因此你应该使用filesize=1024K而不是filesize=1024。即使在https://docs.oracle.com/en/java/javase/14/docs/specs/man/java.html上也是错误的,其中有一个示例说“filesize = 1024”,但后面又说“filesize = 带有可选的K、M或G后缀的文件大小”。 - Guntram Blohm
1
@GuntramBlohm,感谢您的见解。我认为这真的值得一提,这也是ocarlsen的另一个答案有意义的地方。 - Naman
如果你使用 -Xlog:safepoint,你会看到所有的JVM暂停吗?还是会有遗漏的? - MarkoPaulo

20

顺便提一下,尽管在Java 11中NumberOfGCLogFilesGCLogFileSize选项已经被删除,但仍然可以设置滚动文件大小和计数。例如:

java -Xlog:gc*,safepoint:gc.log:time,uptime:filecount=100,filesize=128K ...

对我来说不起作用,至少“-Xlog:gc*,filecount=10,filesize=25M”会让我的JVM立即崩溃。 - Aarkon
@Aarkon,你需要更多的参数,可能需要更多的冒号来提供格式所需的默认值。请参见https://docs.oracle.com/javase/9/tools/java.htm#JSWOR-GUID-BE93ABDC-999C-4CB5-A88B-1994AAAC74D5-Xlog:gc:::filecount=10,filesize=25M应该可以解决问题。 - jbu
关于之前的评论,似乎我无法再编辑了,但是链接并没有跳转到正确的锚点。只需搜索“使用JVM统一日志框架启用日志记录”部分,你会发现格式并不像你提供的示例那么简单。 - jbu

8

它会打印日期和时间

-Xlog:gc*:verbose_gc.log:time

[2019-05-13T14:01:03.356+0530] Heap region size: 1M
[2019-05-13T14:01:03.357+0530] Using G1

注意:使用的是JDK 11


它与JDK 11不兼容,应该是-Xlog:gc:file=verbose_gc.log:time。 - Diego
根据https://docs.oracle.com/javase/9/tools/java.htm#JSWOR-GUID-4856361B-8BFD-4964-AE84-121F5F6CF111,**PrintGCDetails**已被替换为**-Xlog:gc**。 - Swarit Agarwal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接