如何查看docker容器使用的核心数?

use*_*900 4 containers docker

我已经使用 Docker 有一段时间了,我已经安装了 docker 并使用启动了一个容器

docker run -it --cpuset-cpus=0 ubuntu
Run Code Online (Sandbox Code Playgroud)

当我登录 docker 控制台并运行时

grep processor /proc/cpuinfo | wc -l
Run Code Online (Sandbox Code Playgroud)

它显示了 3,这是我在主机上拥有的核心数。

关于如何将资源限制到容器以及如何验证限制的任何想法?

yam*_*enk 9

该问题已在#20770 中提出。该文件/sys/fs/cgroup/cpuset/cpuset.cpus反映了正确的输出。

cpuset-cpus举措正在发挥作用但不会反映在/proc/cpuinfo


use*_*900 8

docker inspect <container_name> 
Run Code Online (Sandbox Code Playgroud)

将提供启动的容器的详细信息,您必须检查其中的“CpusetCpus”,然后您才能找到详细信息。

  • 如果该值为空? (4认同)

Mat*_*att 6

容器并不是完整的虚拟机。某些内核资源仍将像在主机上一样显示。

在这种情况下,--cpuset-cpus=0修改容器 cgroup 有权访问的资源(在/sys/fs/cgroup/cpuset/cpuset.cpus. 不是VM和容器中的内容/proc/cpuinfo

stress-ng验证的一种方法是在容器中运行该工具:

使用 1 个 cpu 将固定在 1 个核心(使用 1 / 3 个核心,100% 或 33% 取决于您使用的工具):

docker run --cpuset-cpus=0 deployable/stress -c 3
Run Code Online (Sandbox Code Playgroud)

这将使用 2 个核心(2 / 3 个核心,200%/66%):

docker run --cpuset-cpus=0,2 deployable/stress -c 3
Run Code Online (Sandbox Code Playgroud)

这将使用 3 个(3 / 3 核,300%/100%):

docker run deployable/stress -c 3
Run Code Online (Sandbox Code Playgroud)

内存限制是另一个未出现在内核统计信息中的区域

$ 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
Run Code Online (Sandbox Code Playgroud)

yamaneks 的答案包括github 问题