首页 > 解决方案 > AWS ECS - 单个实例上的多个容器性能问题

问题描述

我在 AWS Elastic Container Service (ECS) 上使用16 个 CPU 实例。我想在这里运行8 个容器,它们都保留 2 个 CPU

与我在 8 个实例(每个实例有 2 个 CPU)上运行 8 个容器时相比,我使用此设置获得的性能要慢得多(大约两倍)。

目前,CPU 分配似乎并不“硬”,因为调度程序可以随时为容器分配超过 2 个 CPU。

有没有办法将 CPU“硬分配”给容器?我的最终目标是使 CPU 尽可能专门用于单个任务,以便性能更好,即更接近我在单独实例上运行容器时获得的性能。如果我应该采取其他步骤,我也将不胜感激。

请注意,容器运行的任务是完全独立的。

标签: amazon-web-servicesdockermultiprocessingamazon-ecs

解决方案


所以有几点:

  1. ECS 配置的“CPU”参数将为给定容器“保留”CPU。CPU 将始终能够以最小的延迟使用那么多 CPU。但是 - 这不是最大 CPU(并且无法在 ECS 中设置最大 CPU);允许容器根据需要使用未分配的 CPU。因此,如果您有 1 个容器运行 2048 个保留的 CPU 单元,它仍然可以使用所有 16 个 CPU,直到其他需要它们为止。

  2. 您看到的性能下降可能是 CPU 抖动的结果,其中容器需要的 CPU 比您给它们的 CPU 多,因此它们从不使用它的其他容器中获取它。然后当其他容器需要它时,他们需要从更多使用它的容器中获取它,从而导致性能下降。您可能需要调整容器的大小。

在这两点之后,我不得不问:运行 8 个较小的服务器和 8 个容器将解决这个问题,正如您所指出的(8 个容器之间不再共享资源)并且会便宜得多为什么一台大服务器而不是 8 台更小?


推荐阅读