使Java GC日志显示MB或GB而不是KB

end*_*ess 12 java logging profiling garbage-collection

默认情况下,Java GC日志输出以KB(千字节)显示内存详细信息.我知道这可能听起来很愚蠢,但鉴于我所处理的大多数Jvms都有接近20到40GB的堆大小,我发现快速读取KB中的数字非常不方便,特别是在快速扫描腻子等日志时.

是否有可能使Java以MBGB的分数打印这些数字?

我在JDK文档中找不到任何选项.

如果不可能,是否有任何关于如何将此功能添加到GC日志记录的想法?(不是来自外部,而是来自JVM)

预先感谢您的帮助.

Ale*_*lev 9

没有运行时选项可以更改它,它取决于特定的垃圾收集器用于打印日志记录数据.

在JDK 8中使用G1,它将以适当的单位打印,具体取决于堆大小:

$ java -XX:+UseG1GC -verbose:gc
[GC pause (Metadata GC Threshold) (young) (initial-mark) 592M->23M(100G), 0.0137879 secs]
Run Code Online (Sandbox Code Playgroud)

升级到JDK 9,然后统一日志记录将以适当的单位打印,具体取决于堆大小,适用于所有收集器(此外,时间戳也是正确的单位):

$ java -XX:+UseParallelGC -Xlog:gc
[0.766s][info][gc] GC(0) Pause Young (Metadata GC Threshold) 4300M->15M(117760M) 6.765ms
Run Code Online (Sandbox Code Playgroud)


dzr*_*kot 0

我不熟悉这一点,但我知道您可以尝试从您的应用程序中进行 gc 日志记录。了解GarbageCollectorMXBeanGarbageCollectionNotificationInfoGcInfohttps://docs.oracle.com/javase/7/docs/jre/api/management/extension/com/sun/management/GcInfo.html