cgget 命令详解
更新时间:2026-09-17。本文是「一个命令一个文档」系列,聚焦
cgget(control group get,读取控制组)——容器与云原生命令族、libcgroup 套件。设参数用 cgset,cgget负责把配置和实际用量读回来,是验证限制是否生效、排查容器资源的命令行入口。
cgget 打印某个控制组目录下的参数文件内容,既能读静态配置(上限是多少),也能读动态统计(实际用了多少)。它等价于 cat /sys/fs/cgroup/<控制器>/<组>/<参数>,但省去了记路径。
一、基本用法
cgget -g memory:myapp # 看 myapp 在 memory 控制器下的全部参数
cgget -g cpu,memory:myapp # 同时看多个控制器
cgget -r memory.limit_in_bytes myapp # 只看某个参数
cgget -r memory.usage_in_bytes -r memory.limit_in_bytes myapp
cgget -a myapp # 所有控制器、所有变量(输出很长)输出里成对看两个值最有用:
*.limit_*(你设的上限)与*.usage_*(当前实际占用)。只看 limit 等于只看配置没看运行态,排查时一定要把 usage 一起读。
二、内存:离上限还有多远
cgget -g memory:myapp | grep -E 'usage|limit|failcnt|max_usage'
# memory.limit_in_bytes = 536870912 # 上限 512MiB
# memory.usage_in_bytes = 412876800 # 当前已用 ~394MiB
# memory.max_usage_in_bytes = 520093696 # 历史峰值
# memory.failcnt = 173 # 触顶次数(在涨就要警惕 OOM)
failcnt是内存触顶计数:它在涨说明进程反复顶到上限、已在内核里触发回收甚至 OOM。配合usage接近limit、max_usage贴近上限,基本能断定内存给小了。真正 OOM 被杀的排查见OOM 怎么排查。
三、CPU:用量统计与限流
cgget -g cpuacct:myapp | grep usage # cpuacct.usage 单位纳秒,累计 CPU 时间
cgget -g cpu:myapp | grep -E 'shares|quota|period'
# v2 下更直接看是否被限流(throttling):
cat /sys/fs/cgroup/myapp/cpu.stat
# nr_periods 100000 nr_throttled 12034 throttled_usec 88211000
nr_throttled/throttled_usec(v2cpu.stat)是 CPU 被限流的次数与累计时长:如果这两个值持续增长,说明 quota 给小了,进程在每个调度周期里被强制"停表"等待,即使整机还有空闲核也用不上——这正是容器 P99 延迟毛刺的常见根因。cpuacct.usage只给累计纳秒,要按组实时看速率,用 systemd-cgtop 更直观。
四、和 lscgroup / systemd-cgtop / cgset 的分工
| 工具 | 看什么 |
|---|---|
| lscgroup | 列出有哪些组及其挂载路径 |
cgget -g | 看某一个组的全部参数与用量(一次性快照) |
| cgset | 写参数(改上限) |
systemd-cgtop | 按组实时刷新 CPU/内存/IO,类似组级 top |
systemd-cgls | 按组层级展开进程树,看组里到底有哪些 PID |
典型链路:lscgroup 找到组路径 →
cgget确认 limit 与 usage、failcnt/throttled是否在涨 → systemd-cgls 看具体进程 → 需要调整就 cgset 改上限。
五、v2 等价读法
cgroup v2 下统计文件改名并集中,直接 cat 即可:
cat /sys/fs/cgroup/myapp/memory.current # 当前内存用量(= v1 usage_in_bytes)
cat /sys/fs/cgroup/myapp/memory.max # 上限(max 表示不限)
cat /sys/fs/cgroup/myapp/memory.peak # 历史峰值
cat /sys/fs/cgroup/myapp/cpu.stat # 限流统计 nr_throttled/throttled_usec
cat /sys/fs/cgroup/myapp/cpu.weight # v2 权重(默认 100)v1 的
memory.usage_in_bytes→ v2memory.current;memory.max_usage_in_bytes→memory.peak;OOM 计数在 v2memory.events的oom/oom_kill字段。字段语义基本对应,换系统排查时按这张表迁移即可。
相关命令
设参数 cgset、列组 lscgroup、组内启动 cgexec、移动进程 cgclassify、建组 cgcreate。组级实时监控用
systemd-cgtop,OOM 见OOM 排查。
总结
cgget -g 控制器:组名 = 读 cgroup v1 控制组的配置与真实用量:配对看 limit 与 usage,内存盯 failcnt/max_usage 判断是否逼近 OOM,CPU 盯 v2 cpu.stat 的 nr_throttled 判断是否被限流;找组用 lscgroup、实时看用 systemd-cgtop,v2 下直接读 memory.current/cpu.stat。