node.js - 在 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 或内存在系统开始出现问题之前会攀升得更高。任何可能存在瓶颈的想法?
解决方案
这里的主要问题是我们正在运行具有 2 个 CPU 的容器。由于 Node 仅有效地使用了 1 个 CPU,因此总会有一定数量的 CPU 分配从未使用过。辅助开销从未使容器达到 100%。所以节点会在它的 1 个 cpu 上不堪重负,而另一个基本上是空闲的。这导致我们的自动缩放警报永远不会被触发。因此调整为具有更多水平扩展(即更多实例)的 1 个 cpu 容器。
推荐阅读
- python - 如何在 python 介子管理的项目中包含 cython 文件?
- c++ - 如何在 C++ 中定义大型多维数组而不会出现此错误?
- android - 无法启动外部应用程序
- docker - 如何在 Docker 容器上安装 web_entreprise 插件
- django - Django 自定义组和权限
- python - 有没有一种简单的方法可以使用 Python 找到具有特定长度列表的所有子集?
- r - R中的多线3D图
- asp.net - 如何向 Reactjs.net 添加类(相当于从“”导入 style.css)
- python - 一次导入子模块,以便它可用于所有其他子模块和顶级模块
- django - python Django如何在CART Page上显示类别数据?