首页/系统/Linux 运维命令速查/cgroup 资源树查看:systemd-cgls/cgtop
systemd 与服务42 条

cgroup 资源树查看:systemd-cgls/cgtop

从 cgroup 视角看进程归属与资源:cgls 打印单元进程树、cgtop 实时看各 slice 的 CPU/内存占比,定位「谁吃掉了资源」的第三只眼。

Linux 运维命令速查系统更新于 2026-10-13

cgls 与 cgtop 是什么

systemd-cgls 按 cgroup 层级打印进程树,systemd-cgtop 实时展示各资源组的 CPU 与内存占用。它们提供的是「从资源组角度看进程」的视角:当 top 里看不清楚进程归属、又需要把资源消耗对应到具体单元时,这两个命令最直接。

基本信息

用途按资源组观察进程归属与资源占用
常用命令systemd-cgls、systemd-cgtop
层级结构slice → scope 或 service → 进程
相关命令systemctl status 查看单个单元

典型使用场景

  • 定位是哪个服务单元在消耗 CPU 或内存
  • 容器宿主机上查看 machine.slice 下的容器分布
  • 排查进程归属与预期单元不一致
  • 核对系统切片的资源占用分布
  • 与 top、ps 的输出交叉验证
  • 容器化环境下确认资源组的层级关系

常用示例

常用示例
systemd-cgls --no-pager | head -n 40            # 按 cgroup 打印进程树
systemd-cgls /system.slice/myapp.service        # 只看指定单元
systemd-cgtop -m --iterations=2                 # 按内存排序的快照
systemd-cgls /machine.slice | head              # 容器所在的切片
cat /proc/1234/cgroup                           # 确认某进程所属层级
systemctl status myapp.service --no-pager | head
systemd-cgtop --iterations=3                    # 多次采样观察趋势

命令与视角

命令视角典型用途
systemd-cgls静态进程树看归属与层级结构
systemd-cgtop实时资源占用找消耗大头
systemctl status单元视角看单个单元的运行细节
/proc/PID/cgroup单进程归属交叉验证归属判断
machine.slice容器资源切片容器与虚拟机的归组查看
cgtop 的 CPU 百分比是全局占比口径,与 top 的单核百分比算法不同;汇报数据时不要混用两种口径。
老版本展示的是 cgroup v1 层级,v2 统一层级之后路径含义已经不同:对照文档确认版本,别按旧经验解读路径。
cgtop 首次采样的数值抖动较大,至少采两次以上再判断占位,单帧数据容易误导。
核对进程与单元的归属关系时,把 systemctl status 的输出与 cgls 的层级两边交叉对照,单看一边容易漏掉 scope 与 slice 的差别。
排查容器资源占用时,先看 machine.slice 的整体分布,再进入具体容器的资源组看细节;顺序反了会绕很多弯路。
发现某个单元占用异常时,先用 cgls 确认它的进程层级,再配合 systemctl status 看单元状态:前者负责定位范围,后者负责解释原因。

易错点

  • 把 cgtop 的百分比与 top 直接对比:口径不同,容易得出错误结论
  • 按 cgroup v1 的经验解读 v2 路径:层级含义已变,归属判断出错
  • 只看单次采样:首帧抖动明显,容易误判消耗大头
  • 用 cgls 代替单元状态检查:它展示结构,不展示失败原因与依赖关系

数据来源与参考

  • man 1 systemd-cgls
  • man 1 systemd-cgtop
  • cgroup v2 文档

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌