systemd-cgtop命令详解

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:在"统计所有任务"(默认)和"统计用户空间进程+内核线程"模式间切换。

使用示例

  1. 基本用法:直接运行,按 CPU 使用率从高到低显示所有控制组。

    bash 复制代码
    systemd-cgtop
  2. 按内存使用量排序并限制显示行数:

    bash 复制代码
    systemd-cgtop -m -n 5

    此命令将按内存使用量从高到低排序,并只显示前 5 个控制组。

  3. 监控特定服务 :

    如果你想查看 nginx 服务的资源占用,可以通过 grep 过滤:

    bash 复制代码
    systemd-cgtop | grep nginx

    或者,直接指定其控制组路径(通常与 systemd 服务名对应):

    bash 复制代码
    systemd-cgtop /system.slice/nginx.service
  4. 批处理模式输出到文件:运行一次后将结果保存到文件。

    bash 复制代码
    systemd-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 系统上进行容器化环境或微服务的资源分析。

相关推荐
KIDULT°7 小时前
MySQL系列 (1):数据库原理
运维·数据库·mysql·云计算
别动我齐刘海8 小时前
C++ 工程化学习
java·linux·前端·c++·学习·机器学习·机器人
wewowilling10 小时前
认识微服务
java·运维·微服务·springcloud
玖石书10 小时前
Ubuntu 24.04 UFW 全命令攻略:从入门到端口开放实战
linux·运维·ubuntu
xiaoqiMikko10 小时前
Linux 实战(七):useradd、sudoers、umask、SGID、软链 —— 三台真机实测
linux·centos
weifont12 小时前
自动化抓取和上架商品:能不动手,就少动手
运维·前端·自动化
拂拉氏12 小时前
【知识讲解】 Linux之动静态库的了解
linux·运维·服务器·动静态库
Fcy64812 小时前
Linux下 五种IO模型的认识与⾮阻塞IO的实现
linux·服务器·io
Mikko713 小时前
Linux 重启后日志没了?进程被 OOM 杀了去哪看?logrotate 之后日志还往旧文件写?三台真机实测日志与性能排查
linux·运维·centos
书生执笔画浮沉13 小时前
分享一个开源小工具CAdapt
linux·c·gnu·glibc·kernel·升级·灵感