Linux中systemd服务可通过cgroup路径和监控工具获取资源使用情况:查ControlGroup路径后读取cpuacct.usage、memory.max_usage_in_bytes等文件,或用systemd-cgtop实时汇总,再结合journal日志定位高峰原因。

Linux 中 systemd 服务本身不直接生成“资源消耗报表”,但可以通过组合 systemd 的日志、cgroup 机制和系统监控工具,获取其运行时的 CPU、内存、IO 等资源使用情况。关键在于利用 systemd 对每个 service 单元自动创建的 cgroup 路径,再配合标准监控命令提取数据。
查服务对应的 cgroup 路径
systemd 启动的服务会被自动分配到独立的 cgroup(如 /sys/fs/cgroup/systemd/system/xxx.service),这是获取资源统计的基础:
- 先确认服务名,例如
httpd - 运行:
systemctl show -p ControlGroup httpd.service→ 输出类似ControlGroup=/system.slice/httpd.service - 对应完整路径为:
/sys/fs/cgroup/systemd/system.slice/httpd.service
读取实时资源指标
进入该 cgroup 目录,可直接读取内核暴露的统计文件(无需 root,普通用户可读):
监控 Victron Energy 电力系统,生成包含电池状态、光伏发电量和活动警报的精美每日邮件报告。集成 Vic...
-
CPU 使用量:
cat /sys/fs/cgroup/systemd/system.slice/httpd.service/cpuacct.usage(纳秒级累计值,需两次采样做差) -
内存峰值:
cat /sys/fs/cgroup/systemd/system.slice/httpd.service/memory.max_usage_in_bytes -
当前内存用量:
cat /sys/fs/cgroup/systemd/system.slice/httpd.service/memory.usage_in_bytes -
IO 读写字节数:
cat /sys/fs/cgroup/systemd/system.slice/httpd.service/io.stat(格式为major:minor rbytes=… wbytes=…)
用 systemd-cgtop 实时汇总查看
这是最接近“报表”的原生命令,专为 cgroup 设计,按 service 分组显示资源占用:
- 安装(如未预装):
yum install systemd -y或apt install systemd - 运行:
systemd-cgtop - 默认按 CPU 排序,支持交互式操作:
Shift+M按内存、Shift+I按 IO、Shift+T按任务数 - 输出中
system.slice/xxx.service行即对应服务的实时资源汇总
结合 journal 日志分析行为时段
资源突增往往与具体操作相关,可关联时间戳定位原因:
- 查某服务最近日志:
journalctl -u httpd.service --since "1 hour ago" - 过滤含“start”或“reload”的行:
journalctl -u httpd.service | grep -E "(Starting|Reload)" - 把日志时间与
systemd-cgtop观察到的资源高峰比对,就能判断是哪个动作触发了高负载
不复杂但容易忽略:systemd 的资源统计依赖 cgroup v1/v2 支持,默认开启;若系统启用了 cgroup v2(常见于较新发行版),路径可能为 /sys/fs/cgroup/system.slice/httpd.service/,且部分字段名略有不同(如 memory.current 替代 memory.usage_in_bytes)。建议先运行 cat /proc/1/cgroup 确认当前 cgroup 版本。

















