1

问题是这样的。

我们正在使用 CMS 并遇到并发模式故障(大约需要 15 秒)。使用 JRE 8。

已经在使用 UseCMSInitiatingOccupancyOnly 和 CMSInitiatingOccupancyFraction (80%)。不使用 CMSScavengeBeforeRemark。

分配模式是这样的:

分配了许多短期对象。所以我们使用了一个大的年轻代,2GB。幸存者空间未调整。MaxTenuringThreshold 设置为 15。每隔几个小时 CMS 就会启动。

老一代是4GB。内存使用率很高。每次收集后,老年代大约有 30% 的空闲空间。不幸的是,没有更多的可用内存。我们正计划修改程序以使其使用更少的内存,但这需要时间。

通常程序没有太多工作要做,但每隔几个小时(我们无法预测何时)我们就会变得非常忙碌。15 秒的 STW 实在是太长了。

所以我的问题是:

我们如何为我们的程序调整 CMS?

我应该增加老一代(减少年轻一代)吗?

我应该调整幸存者吗?

我应该更改 CMSInitiatingOccupancyFraction 吗?

G1GC 会有帮助吗?

4

1 回答 1

0

老一代是4GB。遇到并发模式故障(大约需要 15 秒)。

这并不是一个大堆。如果您遇到单线程并发模式故障,您不妨使用该大小的并行收集器。

所以我们使用了一个大的年轻代,2GB。

这是比较大的,考虑到 4GB 的整体堆大小,你应该收缩年轻代,让老一代有超过 30% 的喘息空间。

每隔几个小时 CMS 就会启动。

然后你可以通过减少 IHOP 来更频繁地运行它

于 2017-09-28T12:35:15.840 回答