systemd-cgtop 是一个用于实时监控 Linux 控制组(cgroup)资源使用情况的命令行工具。它类似于 top 命令,但视角聚焦在控制组层面,而非单个进程。
它的核心用途是帮助系统管理员和开发者快速了解系统资源的分配与消耗,从而进行性能调优和故障排查。
主要特性与工作原理
-
实时更新:展示资源使用的动态变化,默认每秒刷新一次。
-
多维度监控:可按 CPU、内存或磁盘 I/O 负载进行排序和查看。
-
层次化视图:清晰展示 systemd 管理下的控制组(通常对应一个服务或一组进程)的资源消耗。
-
数据来源 :命令通过读取内核控制组相关的统计信息来获取数据。其中,CPU 使用率 的上限是
100% * CPU核心数。例如,在 8 核系统上,CPU 使用率范围是 0% 到 800%。
命令语法
基本语法如下:
bash
systemd-cgtop [选项] [控制组路径]
如果不指定路径,则显示整个系统的控制组信息。如果指定了路径,则只显示该控制组下的信息。
常用选项 (Options)
你可以通过以下选项来控制 systemd-cgtop 的行为。
| 选项 | 长选项 | 说明 |
|---|---|---|
-c |
--order=cpu |
按 CPU 负载排序(默认)。 |
-m |
--order=memory |
按内存使用量排序。 |
-i |
--order=io |
按磁盘 I/O 负载排序。 |
-t |
--order=tasks |
按任务/进程数量排序。 |
-p |
--order=path |
按控制组路径名字典序排序。 |
-n |
(无长选项) | 指定显示的行数 。例如 -n 5 只显示前5行。 |
-b |
--batch |
批处理模式:不接受交互输入,将输出重定向到文件或管道给其他程序。 |
-r |
--raw |
原始格式:以原始数值(而非人类易读的格式)显示字节数和 CPU 时间。 |
-P |
(无长选项) | 只统计用户空间进程,将整个进程(无论多少线程)计为1个任务,不统计内核线程 |
-k |
(无长选项) | 统计用户空间进程和内核线程,每个进程(无论多少线程)计为1个任务。 |
--cpu=时间 |
将 CPU 使用量显示为"时间"而非百分比。 | |
--iterations=N |
指定运行 N 次后退出。 |
交互式快捷键 (Interactive Keys)
在 systemd-cgtop 运行时,你可以使用以下按键动态调整显示:
-
%:在 CPU 使用率的"百分比"和"时间"两种显示模式间切换。 -
P:在"统计所有任务"(默认)和"只统计用户空间进程"模式间切换。 -
k:在"统计所有任务"(默认)和"统计用户空间进程+内核线程"模式间切换。
使用示例
-
基本用法:直接运行,按 CPU 使用率从高到低显示所有控制组。
bashsystemd-cgtop -
按内存使用量排序并限制显示行数:
bashsystemd-cgtop -m -n 5此命令将按内存使用量从高到低排序,并只显示前 5 个控制组。
-
监控特定服务 :
如果你想查看
nginx服务的资源占用,可以通过grep过滤:bashsystemd-cgtop | grep nginx或者,直接指定其控制组路径(通常与 systemd 服务名对应):
bashsystemd-cgtop /system.slice/nginx.service -
批处理模式输出到文件:运行一次后将结果保存到文件。
bashsystemd-cgtop -b -n 1 > cgroup_report.txt
⚠️ 重要注意事项
systemd-cgtop 显示的数据完整性取决于相关的资源统计功能是否开启。
对于许多系统服务,CPU、内存和 I/O 的统计是默认关闭 的。如果未开启,这些服务在 systemd-cgtop 的输出中可能显示为 0 或为空,导致信息不完整。
如需监控特定服务,需在其 unit 文件(如 /etc/systemd/system/xxx.service)中加入以下配置并重载服务:
bash
[Service]
CPUAccounting=yes
MemoryAccounting=yes
IOAccounting=yes
开启后,systemd-cgtop 才能准确显示该服务的资源消耗。
总的来说,systemd-cgtop 是一个从 cgroup 层面监控系统资源的利器,尤其适合在 systemd 管理的 Linux 系统上进行容器化环境或微服务的资源分析。