java – 为什么垃圾收集器没有比单个数字堆空闲%更快地进行更积极的垃圾收集?

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

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

我在JVM堆免费%图表中看到的24小时基本上是无堆的%以缓慢的速度下降,直到我们达到约9%(大约需要24小时).然后系统运行看起来像一个完整的gc并回到97%.

是否有一些我应该添加/修改的设置会告诉JVM比我们低于10%的堆免费更快地完成这个完整的GC?例如一些比例设定?

它不会导致等待我们获得9%免费的问题,但它会使监控/警报更加困难.理想情况下,我们希望保持高于30%的免费时间,这样如果我们下降到那些单位数字,我们就知道存在某种问题,例如:内存泄漏.

最佳答案 使用其他stackoverflow文章的组合找到答案.

-XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=N

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

点赞