我正在尝试使用docker --cpuset-cpus选项来限制容器的CPU。但由于某种原因,我没有得到理想的结果。例如,以下命令应该只打印1:
docker run -it --cpuset-cpus=0 ubuntu:latest grep processor /proc/cpuinfo | wc -l
但我得到的结果为4(4是我主机中显示的cpus数)。这适用于任何操作系统。
docker run -it --cpuset-cpus=0 centos grep processor /proc/cpuinfo | wc -l
docker run -it --cpuset-cpus=0 alpine grep processor /proc/cpuinfo | wc -l
Client:
Version: 17.09.0-ce
API version: 1.32
Go version: go1.8.3
Git commit: afdb6d4
Built: Tue Sep 26 22:42:45 2017
OS/Arch: linux/amd64
Server:
Version: 17.09.0-ce
API version: 1.32 (minimum version 1.12)
Go version: go1.8.3
Git commit: afdb6d4
Built: Tue Sep 26 22:41:24 2017
OS/Arch: linux/amd64
Experimental: false
我对cpuset-cpus选项的理解有误吗?如果是这样,我需要通过什么确切的参数才能获得我期望的行为? (grep processor /proc/cpuinfo | wc -l
应输出1)
答案 0 :(得分:0)
您的意思是您希望以百分比或数字使用更少的CPU。就像你想要使用50%的CPU,或2个CPU?
$ docker run -it --cpuset-cpus="0-2" ubuntu:14.04 /bin/bash
这意味着容器中的进程可以在cpu 0,cpu 1和cpu 2上执行。
--cpu-quota
标志限制容器的CPU使用率。默认的0值允许容器占用100%的CPU资源(1个CPU)。
似乎有关于https://github.com/moby/moby/issues/20770
的问题尝试使用与
类似的东西docker run --rm --cpuset-cpus=0,1 ubuntu sh -c "cat /sys/fs/cgroup/cpuset/cpuset.cpus"
并检查是否有效。
希望它有所帮助。
答案 1 :(得分:0)
据我所知,内核的CPU集不会以任何方式影响proc文件。