【问题标题】:AWS ECS - Multiple containers on a single instance performance issuesAWS ECS - 单个实例上的多个容器性能问题
【发布时间】:2018-06-04 08:20:39
【问题描述】:

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

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

目前,CPU 分配似乎并不“困难”,因为调度程序可以随时为容器分配 2 个以上的 CPU。

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

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

【问题讨论】:

    标签: amazon-web-services docker multiprocessing amazon-ecs


    【解决方案1】:

    所以有几点:

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

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

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

    【讨论】:

    • 您好帕特里克,感谢您的回复!我完全同意你的两个观点。我想使用尽可能少的实例,因为我的实际问题的规模不仅仅是 8 个容器(想想需要运行的 >200 个容器)。而且计算环境与更多人共享,所以我不能只启动 200 个实例; EC2 有实例限制)。同样对于我来说,如果性能没有受到影响,从 r4.large 到 r4.4xlarge 实例的成本实际上是相同的。 (x8 资源的 x8 成本)
    • 您还可以扩展“您可能需要调整容器大小。”吗?目前他们保留 2048 CPU,但正如你所说,这是有问题的。我更愿意将 CPU 硬分配给进程,这样它们就不会占用彼此的资源。
    • 我会联系您的客户代表 - 可以提升这些 EC2 实例(我们现在在执行文档处理的单个集群中运行的远不止这些)。 200 个实例上的 200 个容器没有问题。话虽如此,如果 8:1 真的是所需的设置,EKS (Kubernetes) 有一种方法可以实际限制每个容器的 CPU - 但这是架构上非常重要的变化。
    • 我所说的正确调整容器大小的意思是,如果它们要让您从其他容器中获取 CPU,那么 2 个 CPU 可能还不够。每个容器可能需要 3 或 4 个 CPU,并减少每个实例的容器数量以获得所需的性能。 2 个 CPU 在其他机器上运行良好,因为它们不会互相饿死,但是他们试图互相饿死的事实意味着在更大的机器上使用 3-4 个 CPU 可能会运行得更快。由于成本原因,您可能不希望这样做,我绝对理解。
    • 我明白了,那么在ECS中没有简单的方法可以解决它。我相信 EKS 目前处于预览阶段?谢谢@Patrick,作为答案接受!
    猜你喜欢
    • 1970-01-01
    • 2016-03-02
    • 2019-04-16
    • 2023-03-30
    • 2021-08-10
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    相关资源
    最近更新 更多