CPU 限制对 docker run Java(tomcat)应用程序有何影响?

CPU 限制对 docker run Java(tomcat)应用程序有何影响?

我在 AWS 上的 ECS(弹性容器服务)中托管的 Docker 容器(在本文中我将其称为“任务”)中运行 Tomcat Java Web 应用程序时一直遇到问题。
我们注意到该任务的 CPU 使用率攀升至 97%(使用 AWS 指标),虽然它有时会自行回升到较低的 CPU 使用率,但该任务通常会关闭。
幸运的是,ECS 会生成一个新的 Docker 任务并重新启动该应用程序(尽管一切恢复在线需要 5-10 分钟,这在我们的生产日中是一段很长的时间!)

我们没有对 ECS 任务配置任何上限(也许我们应该有?)——在之前的项目中,我们将 ECS 主机上的 CPU 从 8 个 vCPU 增加到 32 个 vCPU,果然这个特定的 docker 任务在整个项目期间持续攀升至 ECS 主机 CPU 的 97%。

本周我们将 CPU 从 8 个 vCPU 增加到 16 个 vCPU(内存为 64 GB)。
并且看到了同样的结果。我将任务的软内存限制增加到 4 GB(最初设置为 2 GB),我可以看到内存使用率上升,但绝对不会超过 6 GB。

根据堆栈跟踪(太长,无法发布),tomcat/java 应用程序没有记录内存不足错误。
它通常以 JDBC 错误(最大连接数/池耗尽)开始,然后注销注册,日志系统关闭等。

是 ECS 主机关闭了任务,还是任务在达到 CPU/内存限制后自行关闭(java/tomcat 自行关闭)?此外,在我们的 ECS 代理日志中,我可以看到有关“Exit 143”的语句 - 这是 ECS 终止任务还是容器本身退出?最好为任务设置一个 CPU 上限(关于 JVM 内存,使用任何可用的内存)吗?

相关内容