如何防止docker容器占用所有CPU?

时间:2016-06-10 15:44:21

标签: docker

我对Docker来说有点新,本周在一个容器中占用100%CPU的进程出现问题。我没有在运行时对容器设置任何资源限制,这导致整个服务器停止响应。我无法停靠码头,码头杀死,最终失去了ssh到主机的能力。我最终重新启动了机器。

我正在寻找允许主机保留一些CPU容量的选项,因此不会出现上述情况。

一种想法是在所有容器上使用docker run --cpuset-cpus来阻止它们使用CPU 0,这仅供主机使用。这种方法似乎很浪费。

其他选项在我如何限制方面不太明确。

  • --cpu-shares只允许我将总使用量划分为百分比,这可能会让我处于上述相同的情况。

  • --cpu-period& --cpu-quota对我来说不太清楚,但他们似乎不允许这样做。

有没有办法为主机预留一定比例的CPU?

1 个答案:

答案 0 :(得分:1)

如果使用docker 1.13或更高版本(应使用),则应根据docs使用标志--cpus=0.x

从那里开始,您可以朝多个方向前进。

如果要防止一个粗糙的容器会使主机CPU超负荷运行,则可以分配每个容器,并启动--cpu=X标志,其中X是可用CPU的数量减去一个或任何其他余量。你认为保存。这样,一个粗糙的容器不会耗尽您的CPU资源(但是两个粗糙的容器可以)。这为您提供了最节省资源的配置,因为所有容器在必要时最多可以使用X个CPU(考虑应用程序启动),但是在不需要时不会阻塞这些资源。

另一种情况是您希望所有容器的CPU消耗与主机之间完全隔离。然后,应为每个容器分配其唯一的cpus份额,并跟踪所有给定CPU份额的总和不超过此计算机上可用CPU的总数。这样,所有容器都可以最大限度地利用其CPU,并且您的主机仍然可以运行。

如BMitch的评论中所述。仍然可以通过其他方式使主机CPU过载。例如,通过强制内核进行大量交换。