计算Java服务器中GC时间的百分比

Rya*_*yan 10 java performance garbage-collection jvm java-ee

我正在使用jstat来获取GC操作的总累计时间,即GCT

所以,假设GCT是2秒,我的JVM进程启动了60秒,我是在四核服务器上运行,所以我的GC%是

2 / 60 * 4 = 0.83%
Run Code Online (Sandbox Code Playgroud)

我的计算是否正确?

Mic*_*ßer 6

不,您的计算不准确,因为这样,您不知道操作系统允许程序运行的确切时间.

假设您要考虑GC完全停止应用程序的时间(暂停时间),您可以使用以下JVM选项:

-XX:+PrintGCApplicationConcurrentTime
-XX:+PrintGCApplicationStoppedTime
Run Code Online (Sandbox Code Playgroud)

这个选项将使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
Run Code Online (Sandbox Code Playgroud)

然后,您可以总结应用程序停止的时间,并将其除以应用程序时间加上暂停时间的总和,以获得更改器利用率(GC不会暂停应用程序的时间分数).

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


rad*_*dai 3

不,不是真的。您的计算假设 java 进程在整个时间内对所有 4 个核心的利用率为 100%。

正确的计算是,(time spent in logic) / (time spent in gc)但获取第一条信息通常需要分析器。