首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么在Java9 G1工作了大约6个小时后,在没有实际负载增加的情况下会出现性能下降?

为什么在Java9 G1工作了大约6个小时后,在没有实际负载增加的情况下会出现性能下降?
EN

Stack Overflow用户
提问于 2017-10-05 17:44:46
回答 1查看 1.9K关注 0票数 46

我将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。

EN

回答 1

Stack Overflow用户

发布于 2018-09-09 08:10:59

(请注意,GC调优非常依赖于环境,因此没有什么神奇的方法。)

G1也有类似的问题。默认情况下,它似乎非常不适合REST端点(再说一次,这只是我在我的直接邻居中经历过的)。对我有帮助的是对GC标志的试验,如here所述。

对我们来说,最大的改进来自-XX:G1NewSizePercent=25和-XX:MaxGCPauseMillis=50。随着时间的推移,G1也会自动调整自身,因此最大。GC暂停限制对所有其他参数都有显著影响。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46582523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档