我有一些以docker容器运行的进程和一些直接在主机中运行的进程。实际上,其中一个主机进程也启动了其他docker容器。因此,将所有内容移动到docker并在docker中运行docker并不是我想做的事情。
在重载时,当启动多个docker容器时,它们最终会占用100%的cpu,几乎不会为主机进程留下任何内容。即使是应该杀死这些容器的主机进程也无法运行。
是否可以将所有docker容器的总CPU使用率限制为90%,因此即使在繁重的负载下,主机进程也会获得10%的cpu?
设置cpu shared没有帮助,因为它们只是所有docker容器的相对权重。他们不为主人留下任何东西。
设置cpu配额不是最理想的,它们会在使用率较低时导致利用不足,并且在负载较重时仍然无法停止。
答案 0 :(得分:1)
如果您本地运行,则无法以这种方式限制负载。
如果您正在使用虚拟机(例如在OSX或Windows上运行),您可以通过VM设置对此进行限制,但是否则无法通过docker有效地执行此操作。
但是,如果要限制计算机可用的CPU总数,可以尝试使用--cpuset
(doc link),它可以指定容器的可用CPU总数。
根据您的具体情况,您可能能够完成这项工作 - 如果您在4核计算机上运行,您可以为容器分配3并将1保留给主机。它仍然效率低下,但也许对你的情况足够好。
来自文档:
$ docker run -it --cpuset-cpus="1,3" ubuntu:14.04 /bin/bash
但是如果您已经发现cpu配额选项有限制,我不确定这会更好。
答案 1 :(得分:0)
答案 2 :(得分:0)
回答我自己的问题,并使用各种选项。 Elysian Fields的答案是最简单且可靠的答案之一。还有其他一些选项,我现在结合使用。
docker run openjdk:10-slim nice -n5 java HelloWorld
因此,与这些容器任务相比,重要的宿主进程始终获得更高的优先级。 (优先级可以降低到19(最低)。如果要增加docker容器中进程的优先级,请在docker命令中添加--cap-add=sys_nice
)