将Java垃圾回收日志中的单位从KB改为MB或GB

13

默认情况下,Java GC日志KB(千字节)为单位显示内存详细信息。我知道这听起来很傻,但鉴于我处理的大多数JVM的堆大小接近20到40GB,我发现在快速扫描putty等日志时迅速阅读KB数字相当不方便。

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

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

如果不可能,是否有任何想法可以实现将此功能添加到GC日志记录中? (不是从外部而是从JVM内部)

提前感谢您的帮助。

4个回答

11

没有运行时选项可以更改这个设置,它取决于特定垃圾收集器用于打印日志数据的方式。

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

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

升级到 JDK 9,然后统一日志记录将根据堆大小以适当的单位打印所有收集器的信息(此外,时间戳也使用适当的单位):

升级至JDK 9,则Unified Logging会根据堆大小为所有收集器打印适当单位的信息(还有,时间戳也使用适当的单位):

(Note: Both translations are correct, but the second one is slightly more concise.)
$ java -XX:+UseParallelGC -Xlog:gc
[0.766s][info][gc] GC(0) Pause Young (Metadata GC Threshold) 4300M->15M(117760M) 6.765ms

1
也许你可以创建一个简单的bash程序来重新格式化日志?
在我的例子中,我假设你正在使用Linux,并且已经将Groovy添加到了环境变量中。
/usr/bin目录下创建文件kb2mb,内容如下:
#!/usr/bin/env groovy

System.in.readLines().each{
  println(it.replaceAll(/\d+K/) {
    (((it[0..-2] as Integer) / 1024) as Double).round(2) + "M"
  })
}

然后给程序执行权限:chmod +x /usr/bin/kb2mb

最后,您可以像这样运行它:

cat gc.log|kb2mb

示例输出:

2015-05-26T14:45:37.987-0200:151.126:[GC(分配失败)151.126:[DefNew:614.37M -> 68.25M(614.38M),0.0584157秒] 1581.39M -> 1243.41M(1979.75M),0.0585007秒] [时间:用户=0.06 sys = 0.00,real = 0.06 secs]

您当然可以使用bash,python等而不是groovy。


1

假设你的GC日志文件在:(./my-app-gc.log)
那么使用这个在线插件来调用API:

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

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

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

PostMan插件输出示例:

{
 {
 "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格式数据,以便稍后使用。

您可以在自己的电脑上使用GCViewer应用程序,而不是将数据提交给第三方服务。 - the8472

0

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