2016-09-21 64 views
12

默认情况下Java GC日志输出显示KB(千字节)中的存储器详细信息。我知道这听起来很傻,但鉴于大多数的JVM我处理有接近20至40GB堆大小的,我觉得非常不方便快速地阅读KB的数字,尤其是在腻子等使Java GC日志显示MB或GB而不是KB

快速扫描日志

是否有可能使Java打印在MB分数GB,而不是这些数字?

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

如果是不可能的,是有没有解决如何可以去有关添加此功能GC记录任何想法? (不是从外部,而是来自与JVM)

预先感谢您的帮助。

回答

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 ............................................ ...........
| • - 下载计算机:here |
| • - 浏览器下载 :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格式可以在以后使用。

+0

或者不提交您的数据到第三方服务,您可以只使用您的计算机上的GCViewer应用程序。 – the8472

1

也许你可以创建简单的bash程序来重新格式化你的日志?

在我的例子我假设你正在使用Linux和你有路径时髦。

/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:[Def新:614.37M→68.25M(614.38M),0.0584157秒] 1581.39M→1243.41M(1979.75M),0.0585007秒] [时间:用户= 0.06 sys = 0.00,实时= 0.06秒]

而不是groovy,你co当然使用bash,python等。

7

没有运行时选项来改变它,它取决于特定的垃圾回收器用于打印日志数据。在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