为什么在 Java 9 G1 工作约 6 个小时而没有实际增加负载的情况下,性能会下降?
我将 1 个实例(2 个 vCPU、2GB RAM、加载约 4k req/秒)切换到 Java 9(从最新的 Java 8 开始)。有一段时间,一切都很好,CPU使用率和以前一样。但是,在大约6小时后,CPU消耗无缘无故地增加了4%(从21%增加到25%)。我没有流量峰值,没有增加内存消耗,没有指标更改(我为代码中的每个方法都有计数器)。无。
我将此实例保持未动状态约12个小时,期望它会恢复。但一切都没有改变。它只是开始消耗更多的CPU。
top
命令显示实例的 CPU 峰值比 Java 服务器进程通常的 CPU 峰值更多。我最近读到G1不适合高吞吐量。所以我得出了一个结论,即理性可能在G1中。
我重新启动了实例:
java -XX:+UseParallelGC -jar server-0.28.0.jar
经过约20个小时的监控,一切都像以前一样好。CPU 消耗与许多天前一样处于 21% 的水平。
部署 Java 9 后的 CPU 使用率(6 小时规模):
7 小时 + 12 小时“未触及”(7d 比例)后 CPU 增加:
之后的 CPU - (24 小时刻度):XX:+UseParallelGC
所以我的问题是 - 这是G1的预期行为吗?还有其他人看到类似的东西吗?
乌班图 16.04 x64
java version "9"
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
编辑 03.01.2019
尝试在java 10.0.2上运行一个与G1相同的服务器:
java version "10.0.2" 2018-07-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.2+13)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.2+13, mixed mode)
G1 比服务器重新启动后消耗的 CPU 多 40%。UseParallelGC