CMS旧GC的触发阈值是多少



我们服务器的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究竟是什么时候触发的,即它与所用堆内存的百分比有关吗?。

我用巨大的负载做了一些测试,并使用visualVMjstat监控应用程序。但当旧gc被触发时,我找不到任何模式。有时,当oldgen仅被利用27.13%时,触发gc,然后是76.02%、92.61%等。

有人能给出一些提示,说明是什么真正触发了旧的gc吗?

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

这篇文章说,当旧的gc使用率默认为70%时,gc将被触发。但在这种情况下似乎不起作用。老一代人必须达到多满才能触发一个主要的GC周期?

您链接的另一个问题已经提供了答案:如果您通过UseCMSInitiatingOccupancyOnlyCMSInitiatingOccupancyFraction选项显式配置堆占用,则会触发并发循环。

否则,JVM将使用启发式方法,该方法在运行时根据以前的集合执行情况不断调整阈值。

最新更新