2016-09-21 63 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