lscgroup 命令详解
更新时间:2026-09-17。本文是「一个命令一个文档」系列,聚焦
lscgroup(list cgroup,列出控制组)——容器与云原生命令族、libcgroup 套件。在用 cgget/cgset 操作某个组之前,先用它确认系统里有哪些组、挂在哪、归哪个控制器管。
lscgroup 枚举当前挂载的 cgroup 层级中的所有控制组,输出形如「控制器:路径 挂载点」。它解决的是导航问题:cgroup 在文件系统里可能有多棵层级树(v1),手动 find /sys/fs/cgroup 容易看花,lscgroup 给一个扁平清单。
一、基本用法
lscgroup # 列出所有层级里的所有组
lscgroup -g cpu # 只看 cpu 控制器下的组
lscgroup -g memory # 只看 memory 控制器
lscgroup -g cpu,memory # 多个控制器
lscgroup | grep myapp # 找自己建的组在哪些控制器下存在输出格式是
控制器:相对路径 挂载绝对路径,例如cpu:/myapp /sys/fs/cgroup/cpu。同一逻辑组 myapp 在 v1 下会出现多行(cpu、memory 各一行),这正解释了为什么 cgcreate 要-g cpu,memory:在两棵树分别建目录。
二、典型导航链路
lscgroup -g memory | grep batch # 1. 确认 batch 组存在及其路径
# memory:/batch /sys/fs/cgroup/memory
cgget -g memory:batch # 2. 读这个组的参数/用量
cat /sys/fs/cgroup/memory/batch/tasks # 3. 直接看组里有哪些 PID
ps -o pid,ppid,comm -p $(cat /sys/fs/cgroup/memory/batch/tasks | tr '\n' ',' | sed 's/,$//')lscgroup 只回答"有哪些组、在哪",不显示组里的进程和资源数值——进程归属用 systemd-cgls 或直接看组目录的
tasks/cgroup.procs,资源用量用 cgget 或 systemd-cgtop。
三、和 /proc/cgroups、mount、systemd-cgls 的分工
| 命令/文件 | 回答什么 |
|---|---|
| lscgroup | 已挂载层级里有哪些控制组、路径在哪 |
cat /proc/cgroups | 内核编译/启用了哪些控制器(subsys)、层级号 |
mount | grep cgroup | cgroup 文件系统挂载点(v1 多挂载 / v2 单挂载) |
systemd-cgls | 按组层级展开进程树(组里有哪些 PID) |
systemd-cgtop | 按组实时 CPU/内存/IO 占用 |
cat /proc/<PID>/cgroup | 某个进程当前属于哪个组 |
排查"我的限制为什么没生效"的顺序:先
cat /proc/<PID>/cgroup看进程到底在不在目标组,再 lscgroup 确认组路径,最后 cgget 看参数。很多时候是进程被 cgred 或 systemd 重新归到了别的 slice。
四、v2 下怎么看
cgroup v2 是统一层级,lscgroup(libcgroup/v1 工具)在纯 v2 系统上可能没输出或行为不一致,直接用文件系统和 systemd:
mount | grep ' /sys/fs/cgroup ' # cgroup2 on /sys/fs/cgroup type cgroup2 = 纯 v2
find /sys/fs/cgroup -name cgroup.procs | sed 's#/cgroup.procs##' # 枚举所有组
cat /sys/fs/cgroup/cgroup.controllers # 本层可用控制器
systemd-cgls --all | head -50 # 按 slice/scope 看全部
systemd-cgtop # 组级实时占用
cat /proc/$$/cgroup # 0::/ 开头即 v2 单组判断机器是 v1 还是 v2:
stat -fc %T /sys/fs/cgroup输出cgroup2fs即纯 v2,tmpfs且下面有 cpu/memory 等子目录通常是 v1(或 hybrid)。Docker/K8s 节点的资源排查先确认这一点,再决定用 libcgroup 命令还是直接操作cgroup.procs。
相关命令
建组 cgcreate、设限 cgset、读取 cgget、启动入组 cgexec、迁移进程 cgclassify。容器背景见容器性能。
总结
lscgroup [-g 控制器] = 列出 cgroup 组与其挂载路径:是操作组之前的导航命令,v1 下同一组在多控制器各占一行;看进程归属用 cat /proc/PID/cgroup 与 systemd-cgls,看用量用 cgget/systemd-cgtop;纯 cgroup v2 系统改用 find /sys/fs/cgroup 与 systemd 工具。