Jetty 服务器意外地将 cpu 交易到内存,反之亦然

Jetty server unexpectedly trades cpu to memory and vise versa

我有一个基于 Spark Java 2.5 的休息服务,它在后台使用 Jetty 服务器。 我的问题是它不能在恒定的性能下工作,突然 "decides to trade" cpu 到内存,一段时间后反之亦然。

地块是使用 Java melody 创建的。 如您所见 - 在大约 18:00 处性能图突然发生变化。内存消耗开始增长,处理器负载下降。同时,请求延迟以及每秒请求和请求类型没有变化。其他参数也发生了变化 - 特别是使用的缓冲内存和打开的文件数。

一周后一切都会变回来,也许两周或一个月后循环重复,我在过去三个月看到了这个循环。

我尝试使用分析器,但没有发现任何有用的东西。

我很确定这种变化不是由业务逻辑引起的,因为用户与网络服务器的交互没有任何变化,也没有后台任务处于活动状态,所以可能是码头或 java 的内部结构或配置错误。

服务器在 AWS EC2 的 Docker 容器中的 Java 8 上运行(我们使用 AWS ECS 进行 docker 自动缩放)。每秒加载大约 50 个请求。 api 本身使用 spring 并使用 postgresql 9.4 驱动程序休眠。对于休眠,使用二级 ehcache。 api 中的一些请求是多部分的,大小约为 100kb,并且它们均匀分布在请求时间轴上。 Java 以参数启动:-server -Xmx6000m -XX:+UseG1GC。如果需要更多详细信息,请问我。

我想要的是稳定的表现。如果我的问题与您的经历有共鸣,请回复。

ps: on ~23:30 change 与问题无关,不分析。

最后解决办法很简单。将 -Xms 增加到 500mb 会有所帮助,因为它的行为变得稳定。