CMS老年代垃圾回收的阈值是多少才会被触发?

3
我们服务器的JVM标志(内存)如下:
-Xms2048m
-Xmx2048m
-Xss512k
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:+CMSParallelRemarkEnabled
-XX:NewSize=128m
-XX:MaxNewSize=128m
-XX:PermSize=128m
-XX:MaxPermSize=128m
-XX:+HeapDumpOnOutOfMemoryError

我需要找出旧代垃圾回收器(Old GC)何时被触发,即它是否与使用的堆内存总量的百分比有关。我曾经用巨大的负载进行了一些测试,并使用VisualVM和jstat监控了应用程序。但是我无法找出旧代垃圾回收器实际被触发的任何模式。有时GC会在只使用27.13%、76.02%、92.61%等的oldgen时被触发。
请问有人能给出一些提示,关于什么会真正触发旧代垃圾回收器吗?
我需要找出触发旧代垃圾回收器的内存阈值。这样,我就能在服务器上设置一些高内存警报警告(正确的设置规则排除了任何误报警)。 这篇文章说,默认情况下,当old gc使用率达到70%时将触发gc。但在这种情况下似乎不起作用。 How full does the old generation have to be to trigger a major GC cycle?
1个回答

2
你已经链接了另一个问题并提供了答案:如果你通过 UseCMSInitiatingOccupancyOnlyCMSInitiatingOccupancyFraction 选项进行显式配置,那么并发循环将由堆占用率触发。
否则,JVM将使用启发式算法,在运行时根据以前的收集情况不断调整阈值。

感谢您的回答。在我的情况下,CMSInitiatingOccupancyFraction没有设置,所以我猜它可能是默认的68%。而且我认为正如您所说,JVM使用一些启发式方法来决定阈值。那么您是说我没有办法事先决定阈值吗? - Kripz
我是说你应该设置那些设置。 - the8472

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接