You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

主机/sys/fs/cgroup/cpu路径无法显示Docker容器正确CPU配额值的原因排查

Docker容器CPU配额主机cgroup路径显示异常原因分析

核心原因:cgroups-v1下Docker的嵌套cgroup机制

在cgroups-v1环境中,Docker 24.0.9并未将CPU配额直接设置在你查看的/sys/fs/cgroup/cpu/<container-name>/cpu.cfs_quota_us路径对应的顶层cgroup节点上,而是通过嵌套cgroup实现配额控制:

  • 容器内部看到的/sys/fs/cgroup/cpu/实际映射到主机的子cgroup节点,而非你直接访问的顶层容器cgroup目录
  • 主机上的<container-name>目录是容器的顶层cgroup,但CPU配额被设置在该目录下的子cgroup中,容器进程实际挂载的是这个子cgroup,因此内部查看值正确,顶层目录显示-1(未设置)

验证方法

  • 遍历容器顶层cgroup的子目录,查找正确的配额值:
    sudo find /sys/fs/cgroup/cpu/<container-name> -name "cpu.cfs_quota_us" -exec cat {} \;
    
  • 通过容器内的cgroup映射确认主机路径:
    docker exec <container-name> cat /proc/self/cgroup | grep cpu
    
    输出类似10:cpu:/<container-name>/<sub-path>,主机上对应路径的cpu.cfs_quota_us即为正确配额值

差异产生的背景

Docker在cgroups-v1中采用多层嵌套cgroup结构实现精细化资源隔离:

  • 顶层cgroup仅用于容器标识和基础资源管控
  • CPU、内存等具体配额会下沉到子cgroup设置,容器进程挂载该子cgroup,因此内部能获取正确配置

统计采集问题的解决方向

  • 修改采集程序逻辑,不再直接访问顶层<container-name>目录,而是根据容器/proc/self/cgroup的输出定位到对应子cgroup路径
  • 改用Docker官方统计接口(如docker stats命令或Docker API)获取配额信息,避免直接操作cgroup文件系统

内容的提问来源于stack exchange,提问作者Varun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 20:22:37