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

如何从cgroup路径手动获取Docker容器的CPU、内存相关统计指标

Docker 从 cgroup 路径获取容器资源指标的实现逻辑

以下内容均基于 cgroup v1 环境说明,你提到的/sys/fs/cgroup/cpu/docker/<容器ID>、/sys/fs/cgroup/memory/docker/<容器ID>是 cgroup v1 下 Docker 默认的容器 CPU、内存控制器挂载路径,所有指标均通过读取对应路径下的内核伪文件直接获取或计算得到:

CPU 类指标

  • ['cpu_stats']['cpu_usage']['total_usage'] / ['precpu_stats']['cpu_usage']['total_usage']
    读取CPU cgroup路径下的cpuacct.usage文件得到,该文件返回容器所有CPU核累计消耗的CPU时间,单位为纳秒。前者是当前采集时刻读取的实时值,后者是上一次采集任务执行时读取的历史值,二者的差值即为两次采集间隔内容器消耗的CPU总时间。
  • ['cpu_stats']['system_cpu_usage'] / ['precpu_stats']['system_cpu_usage']
    读取全局/proc/stat文件中首行cpu对应的所有字段求和,转换为纳秒后得到整个系统所有CPU核累计的总运行时间。同样前者为当前采集值、后者为上一次采集的历史值,二者差值为两次采集间隔内系统的总CPU时间,和上述容器CPU时间差值配合即可计算出容器的CPU使用率。

内存类指标

  • ['memory_stats']['usage']
    读取内存cgroup路径下的memory.usage_in_bytes文件得到,单位为字节,统计当前容器进程组总共占用的内存大小,包含匿名页、页缓存、内核栈等所有内存类型的占用。
  • ['memory_stats']['stats']['cache']
    读取内存cgroup路径下的memory.stat文件,匹配到cache字段对应的数值即为该指标结果,单位为字节,统计的是容器占用的页缓存内存大小。
  • ['memory_stats']['limit']
    读取内存cgroup路径下的memory.limit_in_bytes文件得到,单位为字节,是给该容器配置的内存使用上限;如果启动容器时没有设置内存限制,该值会接近宿主机的总物理内存大小。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:12:01