默認情況下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