Docker 容器限制 CPU 资源

时间:2020-12-19 11:16:29

标签: docker

我有一些上游烧瓶容器,当我接受一些请求时,CPU 使用率达到 100%。 系统显示容器正在 100% 使用您的 CPU。

我的问题是:

  1. 如果我限制这些容器上的 CPU 使用率,如果它们到达分配的资源,它们是否会以零错误退出,或者限制资源对 docker 容器的缺点是什么?

  2. 就资源分配给 docker 容器而言,哪一种方法更好? (对于 6 个 CPU 内核)

    a) 使用默认设置运行的两个容器。 (尽可能多地使用内核可以提供的资源)

    b) 4 个容器只能使用 1 个 CPU (--limit cpus ='1')

如果你想让我详细说明,请告诉我。

提前致谢

1 个答案:

答案 0 :(得分:2)

  1. 尝试使用比分配的 CPU 周期更多的 CPU 周期的容器(和其他 Linux 进程)只会受到限制:Linux 内核将改为调度其他进程。除了您的进程运行速度变慢之外,超出 CPU 限制没有任何不利后果。

    例如,假设您的程序启动 4 个线程,每个线程使用完整内核运行一些密集计算,但您正在使用 --cpus=2 在 Docker 容器中运行它。四个线程都将运行,但合并后的程序将被限制为 200% CPU,整体性能与仅启动 2 个线程时相似。

  2. 如果您不明确限制 CPU 利用率,通常会获得更好的整体系统利用率。如果您正在运行 4 个容器,其中一个正在运行上述 4 线程计算作业,而其他三个处于空闲状态,那么您将在没有限制的情况下充分利用可用的系统资源。

    如果您确实有一个特定的计算密集型容器,您可能希望限制其 CPU 使用率,以免其他进程饿死。如果您只有一个工作容器和三个 Web 服务器容器,请考虑将工作容器限制为 4 核系统上的 3 或 3.5 个 CPU,以保证 HTTP 流量的一些备用周期。这是一项调整优化,因此只有在您发现问题时才进行调查。

请注意 CPU 和内存的工作方式不同。您不能真正使用“过多”CPU,因为如果您等待,总会有更多的 CPU 周期,但内核会分配您的进程能够运行的内容。另一方面,内存是固定的,如果超过内存限制,您的进程就会被杀死。