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

缺省情况下,Java GC 日志输出以 KB(千字节)为单位显示内存详细信息。我知道这听起来可能很愚蠢,但是考虑到我处理的大多数Jvms的堆大小接近20到40GB,我发现快速读取KB中的数字非常不方便,尤其是在快速扫描腻子等中的日志时。

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

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

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

提前感谢您的帮助。


答案 1

没有运行时选项可以更改此设置,这取决于特定的垃圾回收器用于打印日志记录数据。

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

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

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

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

答案 2

假设您的GC日志文件位于:()
然后使用此在线插件调用API:./my-app-gc.log,

curl -X POST --data-binary @./my-app-gc.log http://api.gceasy.io/analyzeGC?apiKey= --header "Content-Type:text"

或者使用第三个软件 [PostMan ]

本软件支持:
enter image description here
|• - 下载电脑 : 这里 |
|• - 浏览器下载 : 这里 |
......

邮递员插件输出示例:

{
 {
 "isProblem": true,
 "problem": [
 "122 times threads were stopped for more than 5 seconds"
],
"jvmHeapSize": {
"youngGen": {
  "allocatedSize": "7.5 gb",
  "peakSize": "6 gb"
},
"oldGen": {
  "allocatedSize": "22.5 gb",
  "peakSize": "22.5 gb"
},
"metaSpace": {
  "allocatedSize": "1.04 gb",
  "peakSize": "48.52 mb"
},
"total": {
  "allocatedSize": "30 gb",
  "peakSize": "28.5 gb"
}
},
"gcStatistics": {
"totalCreatedBytes": "249.49 gb",

此输出是一种有用的 Json 格式的数据,可以在以后使用。


推荐