4

这些是我在 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 小时)。然后系统运行看起来像一个完整的 gc 并恢复到 97%。

是否有一些我应该添加/修改的设置会告诉 JVM 比当我们得到低于 10% 的堆空闲时更快地执行这个完整的 GC?例如一些比率设置?

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

4

2 回答 2

2

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

-XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=N

其中 N 大致是占用的百分比将触发完整的 GC。默认值为 ~92,这就是为什么我看到完整的 GC 有 9% 的免费。将它切换到 65 对我的用例有用。一个完整的 GC 现在发生了 ~ 35% 的空闲。

于 2012-10-11T22:01:25.083 回答
0

删除:-Xms10g 然后监控堆的总大小怎么样?这也将导致 gc 更频繁地运行。

如果您的应用程序只使用 300MB 的内存(3%),那么从 10 GB 分配开始似乎是极端的。

于 2012-10-11T16:01:22.157 回答