CMS旧GC的触发阈值是多少

时间:2015-11-06 00:52:23

标签: java memory garbage-collection

我们服务器的JVM标志(内存)如下所示

-Xms2048m
-Xmx2048m
-Xss512k
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:+CMSParallelRemarkEnabled
-XX:NewSize=128m
-XX:MaxNewSize=128m
-XX:PermSize=128m
-XX:MaxPermSize=128m
-XX:+HeapDumpOnOutOfMemoryError

我需要找出旧GC启动的时间,即它与使用的总堆内存百分比有关吗?

我使用 visualVM jstat 对大量负载进行了一些测试并监控了应用。但实际上触发旧gc时我找不到任何模式。有时gc被触发当oldgen仅被利用27.13%然后76.02%,92.61%等。

有人可以提供一些关于实际触发旧gc的提示吗?

我需要找出触发旧gc的内存阈值。有了这个,我可以在服务器中设置一些高内存警报警告(正确的设置排除任何触发的错误警报)?

这篇文章说,默认情况下,旧的gc使用率为70%时会触发gc。但似乎没有在这种情况下工作。 How full does the old generation have to be to trigger a major GC cycle?

1 个答案:

答案 0 :(得分:2)

您已经链接的另一个问题已经提供了答案:如果您通过UseCMSInitiatingOccupancyOnlyCMSInitiatingOccupancyFraction选项明确配置了并发周期,则会由堆占用率触发。

否则JVM会使用启发式方法,根据以前的集合执行方式,在运行时连续调整阈值。