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

相关推荐
Zhu7582 小时前
在docker环境部署frp
运维·docker·容器
hhwyqwqhhwy2 小时前
Ubuntu22.04 安装vitis
linux
运维行者_3 小时前
企业带宽监控工具实战:网络流量分析与异常排查的5个关键能力
运维·服务器·开发语言·网络·分布式·后端·php
刚入门的大一新生3 小时前
Linux-Linux第一个系统程序-进度条
linux·运维·服务器
wuminyu3 小时前
JDK21解决虚拟线程IO阻塞原理剖析
java·linux·c语言·jvm·c++
梦想的旅途23 小时前
企业微信自动化实战:客户资料自动修改与备注同步
运维·自动化·企业微信
梦想的旅途23 小时前
企业微信自动化实战:客户通讯录备份与关系自动迁移
运维·自动化·企业微信
茫忙然3 小时前
Linux提权辅助查询工具——BinLens的安装和使用
linux·提权·binlens
FlightYe3 小时前
linux系统编程(八):阻塞与非阻塞IO对比
android·linux·运维·服务器·github·vim