默认情况下Java GC日志输出显示KB(千字节)中的存储器详细信息。我知道这听起来很傻,但鉴于大多数的JVM我处理有接近20至40GB堆大小的,我觉得非常不方便快速地阅读KB的数字,尤其是在腻子等使Java GC日志显示MB或GB而不是KB
快速扫描日志是否有可能使Java打印在MB或分数GB,而不是这些数字?
我在JDK文档中找不到任何选项。
如果是不可能的,是有没有解决如何可以去有关添加此功能GC记录任何想法? (不是从外部,而是来自与JVM)
预先感谢您的帮助。
默认情况下Java GC日志输出显示KB(千字节)中的存储器详细信息。我知道这听起来很傻,但鉴于大多数的JVM我处理有接近20至40GB堆大小的,我觉得非常不方便快速地阅读KB的数字,尤其是在腻子等使Java GC日志显示MB或GB而不是KB
快速扫描日志是否有可能使Java打印在MB或分数GB,而不是这些数字?
我在JDK文档中找不到任何选项。
如果是不可能的,是有没有解决如何可以去有关添加此功能GC记录任何想法? (不是从外部,而是来自与JVM)
预先感谢您的帮助。
我不熟悉这一点,但我知道,你可以尝试从您的应用程序使GC日志记录。阅读关于GarbageCollectorMXBean,GarbageCollectionNotificationInfo和GcInfo。 https://docs.oracle.com/javase/7/docs/jre/api/management/extension/com/sun/management/GcInfo.html
可以说你的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
]
这软件支持:
............................................ ...........
| • - 下载计算机: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格式可以在以后使用。
也许你可以创建简单的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等。
没有运行时选项来改变它,它取决于特定的垃圾回收器用于打印日志数据。在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
或者不提交您的数据到第三方服务,您可以只使用您的计算机上的GCViewer应用程序。 – the8472