![Docker 守护进程如何知道可用的硬件资源?](https://linux22.com/image/1592404/Docker%20%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B%E5%A6%82%E4%BD%95%E7%9F%A5%E9%81%93%E5%8F%AF%E7%94%A8%E7%9A%84%E7%A1%AC%E4%BB%B6%E8%B5%84%E6%BA%90%EF%BC%9F.png)
我们在 VMWare 虚拟机管理程序上的 RedHat VM 上运行 Docker。当我们向 VM 添加更多虚拟核心 (vCPU) 时,RedHat 可以看到额外的资源并可以处理它,但无法处理 Docker 正在运行或启动的容器。它们只能使用CPU0 至 CPU7并且 CPU8 至 CPU15 是完全不受任何容器触及。Docker 检查未返回 CPU 限制。重新启动虚拟机也无助于解决这个问题。cadvisor 容器还报告只有 8 个核心可用。有人知道如何修复它吗?Docker 是否将原始 CPU 数量保存在某处?Docker 守护进程如何知道可用的核心数量?
答案1
我们解决了这个问题。有一个技巧可以让 docker 知道热插拔 CPU。我们不知道为什么旧设置在重启后仍然存在。以下命令是解决方案:
for c in $(compgen -G '/sys/fs/cgroup/cpuset/system.slice/docker-*'); do echo 0-15 > ${c}/cpuset.cpus ; done