我使用Docker已经有一段时间了,我已经安装了docker,并使用以下命令启动了一个容器
docker run -it --cpuset-cpus=0 ubuntu
当我登录到docker控制台并运行
grep processor /proc/cpuinfo | wc -l
它显示了3,这是我的主机上的核心数量。
关于如何将资源限制在容器中,以及如何验证这些限制,您有什么想法吗?
发布于 2017-11-29 16:06:42
Containers aren't complete virtual machines。某些内核资源仍然会像在主机上一样显示。
在这种情况下,--cpuset-cpus=0
会修改容器cgroup有权访问的资源,而不是容器可以看到的资源。
验证的一种方法是在容器中运行stress-ng
工具:
使用1个cpu将固定在1个核心(使用中的1/3个核心,100%或33%取决于您使用的工具):
docker run --cpuset-cpus=0 deployable/stress -c 3
这将使用2核(2 /3核,200%/66%):
docker run --cpuset-cpus=0,2 deployable/stress -c 3
这将使用3个(3/3内核,300%/100%):
docker run deployable/stress -c 3
内存限制是另一个不会出现在内核统计信息中的区域
$ docker run -m 64M busybox free -m
total used free shared buffers cached
Mem: 3443 2500 943 173 261 1858
-/+ buffers/cache: 379 3063
Swap: 1023 0 1023
发布于 2017-11-29 16:16:55
这个问题已经在#20770中提出了。文件/sys/fs/cgroup/cpuset/cpuset.cpus
反映了正确的输出。
cpuset-cpus
正在生效,但没有反映在/proc/cpuinfo
中
发布于 2018-08-24 13:35:33
docker inspect <container_name>
会给出启动的容器的详细信息,你必须在那里检查"CpusetCpus“,然后你就会找到详细信息。
https://stackoverflow.com/questions/47545960
复制相似问题