每个容器中的nginx和nodejs需要多少内存和cpu?

Jon*_*Sud 5 nginx amazon-ecs node.js docker

我想在 aws ecs 中创建一个任务定义。

在conatiner中运行nginx需要多少内存和CPU?和另一个容器中的nodejs?

nginx - 只是一个从 80 到 3000 的代理。

nodejs - 调用 atlas mongodb 的简单服务

Adi*_*iii 8

在 ECS 中运行容器时,我永远不会推荐硬内存限制。

此外,您无法确定容器空闲状态的内存,因此最好查看 Nginx 的一些基准测试,而节点内存因应用程序而异,而且糟糕的代码可能比良好的托管应用程序消耗更多的内存。

NGINX 使用 1 个工作线程、15% 的 CPU 和 1MB 内存来处理每秒 11,500 个请求。

基准测试显示 NGINX 轻量级

现在根据您的流量 EXPECTED_REQUST/11500 = Required memory

尽管Nodejs的内存非常关键并且完全取决于您的代码,如果应用程序没有正确关闭文件或请求,它会比预期更快地达到最大内存,因此请保留内存。

内存预留

为容器保留的内存的软限制(以 MiB 为单位)。当系统内存争用时,Docker 会尝试将容器内存保持在这个软限制;但是,您的容器可以在需要时消耗更多内存

例如,如果您的容器通常使用128 MiB 的内存,但偶尔会在短时间内爆发到256 MiB 的内存,您可以将 a 设置memoryReservation为 128 MiB,并将内存硬限制设置为 300 MiB。这种配置将允许容器仅从容器实例上的剩余资源中保留 128 MiB 的内存,但也允许容器在需要时消耗更多的内存资源。

ECS内存预留

所以最好不要设置所谓的硬限制memory

要呈现给容器的内存量(以 MiB 为单位)。如果您的容器尝试超过此处指定的内存,则该容器将被杀死。为任务中的所有容器保留的内存总量必须低于任务内存值(如果指定了一个值)。


Neo*_*son 5

确定这一点的最简单方法是凭经验使用docker stats- 因为所利用的资源与您的应用程序每秒接收的请求成正比。

在空闲时,两个容器都需要大约 10MB 的内存和大约 0 个 CPU 使用率 :)

CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
4be92e1cd6bf        elastic_germain     0.00%               6.68MiB / 15.65GiB    0.04%               5.68kB / 0B         0B / 0B             11
7c5552053782        modest_black        0.00%               4.543MiB / 15.65GiB   0.03%               6.37kB / 0B         0B / 8.19kB         2
Run Code Online (Sandbox Code Playgroud)

nginx 的大小不应超过 128MB,除非您打算启用内容缓存。
至于节点容器,512MB应该绰绰有余。

这些值与应用程序应接收的实际流量相关:如果预期流量未知或模糊猜测,则尝试提前预测这些数字只是一种有根据的猜测

好消息是最大理论限制与主机的内核调度程序允许的一样多。无状态应用程序可以超越这一点,使用水平扩展,跨多个 docker 节点。