簡體   English   中英

計算Java服務器中GC時間的百分比

[英]Calculation of % of GC time in Java server

我正在使用jstat來獲取GC操作的總累計時間,即GCT

所以,假設GCT是2秒,我的JVM進程啟動了60秒,我是在四核服務器上運行,所以我的GC%是

2 / 60 * 4 = 0.83%

我的計算是否正確?

不,您的計算不准確,因為這樣,您不知道操作系統允許程序運行的確切時間。

假設您要考慮GC完全停止應用程序的時間(暫停時間),您可以使用以下JVM選項:

-XX:+PrintGCApplicationConcurrentTime
-XX:+PrintGCApplicationStoppedTime

這個選項將使JVM打印到stdout:

Application time: 3.3319318 seconds
Total time for which application threads were stopped: 0.7876304 seconds
Application time: 2.1039898 seconds
Total time for which application threads were stopped: 0.4100732 seconds

然后,您可以總結應用程序停止的時間,並將其除以應用程序時間加上暫停時間的總和,以獲得更改器利用率(GC不會暫停應用程序的時間分數)。

另見http://prefetch.net/blog/index.php/2008/02/18/measuring-the-time-an-application-was-stopped-due-to-garbage-collection/

不,不是真的。 您的計算假設整個過程中java進程100%利用所有4個核心。

正確的計算是(time spent in logic) / (time spent in gc)但是獲取第一條信息通常需要一個分析器。

PrintGCDetails - 此選項可能會有所幫助。 它會刪除有關每個垃圾收集的信息。

[GC
[PSYoungGen: 99952K->14688K(109312K)]
422212K->341136K(764672K), 0.0631991 secs]
[Times: user=0.83 sys=0.00, real=0.06 secs]

提供CPU使用率和已用時間信息。 用戶權限的值是操作系統外執行指令的垃圾收集所使用的CPU時間。 在此示例中,垃圾收集器使用0.06秒的用戶CPU時間。 sys右側的值是操作系統代表垃圾收集器使用的CPU時間。 在此示例中,垃圾收集器未使用任何CPU時間代表垃圾回收執行操作系統指令。 真實權利的值是垃圾收集的經過的掛鍾時間(以秒為單位)。 在此示例中,完成垃圾回收需要0.06秒。

Java性能 - 好書,可以在數字版本中找到。 包含一篇關於測量GC影響的精彩文章。

不,計算不正確。 想要計算的是

( CPU spent on GC ) / ( total CPU spent on JVM)

正如其他評論中所指出的,“在JVM上花費的總CPU”將低於60 * 4,因為它假設您的應用程序完全系統負載,並且沒有操作系統或其他應用程序花費的CPU周期。 在linux上,可以使用“time”和“ps”命令在這里找出正確的數字。

但是,jstat命令也很難找到“花在GC上的CPU”。 我懷疑jstat會報告掛鍾時間(而不是CPU時間),這對於上面的計算是無用的 - 再次,您不知道GC是否在掛鍾時間段內完全加載了所有內核。 令人驚訝的是,沒有明確的文檔說明jstat命令報告了什么樣的時間(掛鍾與CPU) - 如果我錯過了,請在這里發表評論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM