首页 > 解决方案 > 在 Fargate 中运行的 Node Web 应用程序在内存和 CPU 相对没有负担的负载下崩溃

问题描述

我们在 5 个 Fargate 容器中运行 Koa Web 应用程序。它们是在 Mongo Atlas 上使用 Koa 的非常简单的 crud/REST API。我们开始进行容量测试,并注意到节点服务器开始显着变慢,CPU(位于 30%)、内存(位于或低于 20%)和 Mongo(仍然在 < 10 毫秒内返回)上剩余大量空间.
为了进一步测试这一点,我们删除了 Mongo 操作,只是敲击了我们的健康检查端点。我们确实看到了很多吞吐量,但在 25% CPU 时发生了显着下降,并且 Node 实际上在 40% CPU 时崩溃了。

我们的 Fargate 任务(容器)是 CPU:2048(2 个“虚拟 CPU”)和 Memory 4096(4 gigs)。我们将 ulimit nofile 提高到 64000,并将 max-old-space-size 设置为 3.5 GB。这并没有导致显着差异。

我们也没有在负载均衡器中看到明显的延迟。

我的期望是 CPU 或内存在系统开始出现问题之前会攀升得更高。任何可能存在瓶颈的想法?

标签: node.jsperformanceaws-fargate

解决方案


这里的主要问题是我们正在运行具有 2 个 CPU 的容器。由于 Node 仅有效地使用了 1 个 CPU,因此总会有一定数量的 CPU 分配从未使用过。辅助开销从未使容器达到 100%。所以节点会在它的 1 个 cpu 上不堪重负,而另一个基本上是空闲的。这导致我们的自动缩放警报永远不会被触发。因此调整为具有更多水平扩展(即更多实例)的 1 个 cpu 容器。


推荐阅读