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 看单元状态:前者负责定位范围,后者负责解释原因。