Docker容器的CPU分配

我创build了一个容器:

docker run -c=20 -i -t ubuntu:latest /bin/bash 

我尝试使用-c标志来控制CPU使用率,并将其最大化为50%。 当我在容器内运行md5sum /dev/urandom ,它在主机中占用了100%的CPU。

docker run命令的-c标志修改了相对于所有其他正在运行的容器的权重的容器的CPU份额权重。

它不限制容器从主机使用CPU。

您可以使用--cpu-quota标志来限制CPU使用率,例如:

 $ docker run -ti --cpu-quota=50000 ubuntu:latest /bin/bash 

--cpu-quota通常与--cpu-period结合使用。 请参阅Docker运行参考文档的更多详细信息:

https://docs.docker.com/reference/run/#runtime-constraints-on-resources

看来你正在运行一个容器,所以这是预期的结果。

你可能会发现这个博客文章有帮助。

每个新的容器默认都有1024个CPU。 这个价值并不意味着什么,单单谈到它。 但是如果我们启动两个容器,并且两个容器都使用100%的CPU,那么CPU时间将在两个容器之间平均分配,因为它们具有相同的CPU份额(为了简单起见,我假设没有其他进程在运行)。

看看这里,这显然是你在找什么:

https://docs.docker.com/engine/reference/run/#cpu-period-constraint

默认CPU CFS(完全公平调度程序)周期为100ms。 我们可以使用–cpu-period来设置CPU的周期来限制容器的CPU使用率。 通常–cpu-period应该使用–cpu-quota。

例子:

 $ docker run -it --cpu-period=50000 --cpu-quota=25000 ubuntu:14.04 /bin/bash 

如果有1个CPU,这意味着容器每50ms可以获得50%的CPU运行时间。

期限和配额定义:

在每个给定的“周期”(微秒)内,一个组被允许仅消耗高达“配额”微秒的CPU时间。 当一个组的CPU带宽消耗超过此限制(在该时间段内)时,属于其层次结构的任务将被限制,并且在下一个时间段之前不允许再次运行。