我对 Docker 有点陌生,本周遇到了一个问题,容器中的进程占用了 100% 的 CPU。运行时我没有对容器设置任何资源限制,这导致整个服务器停止响应。我无法 docker stop、docker kill,最终失去了 ssh 到主机的能力。我最终重新启动了机器。
我正在寻找允许主机保留一些 CPU 容量的选项,这样就不会发生上述情况。
一种想法是--cpuset-cpus在所有容器上使用 docker run来防止它们使用 CPU 0,而 CPU 0 只供主机使用。这种方法似乎很浪费。
其他选项在我如何限制方面不太清楚。
--cpu-shares 只允许我将总使用量分成百分比,这可能会使我处于上述相同的情况。
--cpu-period&--cpu-quota对我来说不太清楚,但他们似乎不允许这样做。
有没有办法为主机保留一定比例的 CPU?
--cpus=0.x如果您使用 docker 1.13 或更高版本(您应该这样做),您应该根据docs使用该标志。
从那里开始,您可以朝多个方向前进。
如果您想防止一个粗糙的容器使您的主机 CPU 过载,您可以为您启动的每个容器分配一个标志,--cpu=X其中X可用 CPU 的数量减去 1 或您认为节省的任何其他余量。这样,一个粗糙的容器就不会耗尽您的 CPU 资源(但两个粗糙的容器可以)。这为您提供了最高效的资源配置,因为如果需要,所有容器都可以使用最多 X 个 CPU(考虑应用程序启动),但如果不需要,则不要阻止这些资源。
另一种情况是您希望所有容器和主机的 CPU 消耗完全隔离。然后,您应该为每个容器分配其唯一的 cpu 份额,并跟踪所有给定 CPU 份额的总和不高于该计算机上可用 CPU 的总数。这样,所有容器都可以最大限度地利用其 CPU,而您的主机仍然可以运行。
正如 BMitch 的评论中提到的。仍然可以通过其他方式使主机 CPU 过载。例如,通过强制内核进行大量交换。
| 归档时间: |
|
| 查看次数: |
1198 次 |
| 最近记录: |