amazon-web-services - AWS ECS - 单个实例上的多个容器性能问题
问题描述
我在 AWS Elastic Container Service (ECS) 上使用16 个 CPU 实例。我想在这里运行8 个容器,它们都保留 2 个 CPU。
与我在 8 个实例(每个实例有 2 个 CPU)上运行 8 个容器时相比,我使用此设置获得的性能要慢得多(大约两倍)。
目前,CPU 分配似乎并不“硬”,因为调度程序可以随时为容器分配超过 2 个 CPU。
有没有办法将 CPU“硬分配”给容器?我的最终目标是使 CPU 尽可能专门用于单个任务,以便性能更好,即更接近我在单独实例上运行容器时获得的性能。如果我应该采取其他步骤,我也将不胜感激。
请注意,容器运行的任务是完全独立的。
解决方案
所以有几点:
ECS 配置的“CPU”参数将为给定容器“保留”CPU。CPU 将始终能够以最小的延迟使用那么多 CPU。但是 - 这不是最大 CPU(并且无法在 ECS 中设置最大 CPU);允许容器根据需要使用未分配的 CPU。因此,如果您有 1 个容器运行 2048 个保留的 CPU 单元,它仍然可以使用所有 16 个 CPU,直到其他需要它们为止。
您看到的性能下降可能是 CPU 抖动的结果,其中容器需要的 CPU 比您给它们的 CPU 多,因此它们从不使用它的其他容器中获取它。然后当其他容器需要它时,他们需要从更多使用它的容器中获取它,从而导致性能下降。您可能需要调整容器的大小。
在这两点之后,我不得不问:运行 8 个较小的服务器和 8 个容器将解决这个问题,正如您所指出的(8 个容器之间不再共享资源)并且会便宜得多。为什么一台大服务器而不是 8 台更小?
推荐阅读
- java - 如何将 SQL UNION 与三个独立的 Ignite 缓存一起使用
- excel - 通过 Access VBA 对 Excel 进行排序的问题
- c# - 如何在 C# 中读取 google sheet api v4 中的 CellFormat?
- python - 一个 Hot Encoder 无法对分类数据类型进行编码
- c# - 我们如何修复 C# 中的 checkmarx 漏洞 Cleansing_Canonicalization_and_Comparison_Errors?
- javascript - 映射数据以显示 2 个属性
- python - 自定义损失函数 keras TypeError
- swift - PBItemCollectionServicer 连接断开 UIDragInteraction
- django - 将文章传输到呈现为字符串的标签
- image - Codeigniter 4 image watermark