我将1个实例(2个vCPU,2 2GB内存,负载约4k请求/秒)切换到Java9(从最新的Java8)。有一段时间,一切都很好,CPU使用率和以前一样。但是,大约6小时后,CPU使用量无缘无故地增加了4% (从21%增加到25%)。我没有流量峰值,没有内存消耗增加,没有指标变化(我对代码中的每个方法都有计数器)。没什么。
我把这个实例原封不动地放了大约12个小时,希望它能恢复原状。但一切都没变。它刚刚开始消耗更多的CPU。
top
命令显示,该实例的CPU峰值比通常的Java服务器进程要多。我最近读到G1不适合高吞吐量。所以我得出了一个结论,原因可能是G1。
我用以下命令重启了实例:
java -XX:+UseParallelGC -jar server-0.28.0.jar
经过大约20个小时的监测,一切都和以前一样好。CPU消耗与前几天一样,达到了21%的水平。
Java 9部署后的CPU使用率(6小时规模):
CPU在7小时+ 12小时“原封不动”后增加(7天尺度):
CPU after -XX:+UseParallelGC
(24小时刻度):
所以我的问题是-这是G1的预期行为吗?还有人看到了类似的东西吗?
Ubuntu 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比UseParallelGC
多消耗40%的CPU。
https://stackoverflow.com/questions/46582523
复制相似问题