为什么垃圾收集器不比单位数堆空闲百分比更早地进行更积极的垃圾收集?

2024-06-05

这些是我在 WebLogic 11g 中的 Sun Hotspot 1.6 JVM 堆设置:

-Xms10g -Xmx10g -XX:MaxPermSize=256m -XX:+UseParNewGC -XX:ParallelGCThreads=2 -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:ConcGCThreads=2

我在 24 小时的 JVM 堆可用百分比图表中看到,基本上堆可用百分比以缓慢的速度下降,直到达到大约 9%(大约需要 24 小时)。然后系统运行看起来像完整的垃圾回收并恢复到 97%。

我是否应该添加/修改一些设置来告诉 JVM 比堆空闲率低于 10% 时更快地执行完整 GC?例如一些比例设置?

等到我们达到 9% 的空闲率时它不会造成问题,但它使监控/警报变得更加困难。理想情况下,我们希望始终保持高于 30% 的免费率,这样,如果我们下降到这些个位数,我们就知道存在某种问题,例如内存泄漏。


结合其他 stackoverflow 文章找到了答案。

-XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=N

其中 N 大约是触发完整 GC 的占用百分比。默认值为 ~92,这就是为什么我看到完整 GC 的免费率为 9%。将其切换到 65 适用于我的用例。发生完整的 GC 现在大约 35% 是免费的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么垃圾收集器不比单位数堆空闲百分比更早地进行更积极的垃圾收集? 的相关文章

随机推荐