如何限制容器中top命令显示的CPU核心数量?
Docker容器CPU核心数显示问题解决方法
问题原因
docker update --cpus="2"只是通过cgroup限制容器的CPU使用率上限(最多占用2核的计算能力),但不会修改容器内/proc/cpuinfo等系统文件,所以top这类读取该文件的工具会显示宿主机的总核心数;而nproc读取的是sysconf(_SC_NPROCESSORS_ONLN),这个值会受Docker的CPU绑定设置影响,因此能正确返回限制后的核心数。
解决方法
要让top和应用都正确识别到指定的核心数,需要使用核心绑定的方式,而非单纯的使用率限制:
启动容器时指定绑定的核心:
docker run --cpuset-cpus="0-1" [其他参数] <镜像名>这里
0-1表示绑定宿主机的第0、1号物理核心,容器内的/proc/cpuinfo会只显示这2个核心,top和应用都会识别到2核。更新已运行的容器:
docker update --cpuset-cpus="0-1" <容器ID/名称>
补充说明
- 如果仅需限制CPU使用率而不绑定物理核心,
--cpus参数足够,但无法让top和依赖/proc/cpuinfo的应用识别到限制后的核心数。 --cpuset-cpus是从系统层面隔离核心可见性,能彻底解决应用和工具的核心数识别问题,匹配你的场景需求。
内容的提问来源于stack exchange,提问作者Felipe Cabral
相关产品推荐
相关产品推荐

