journalctl 查不到 cgroup 资源消耗,因为它只收集文本日志,不采集内核暴露的 cgroup 运行时指标(如 memory.current、cpu.stat),这些数据需直接读取 /sys/fs/cgroup/ 或用 systemd-cgtop 等工具获取。

journalctl 本身不直接记录或显示控制组(cgroup)的资源消耗数据,它只负责收集和查询 systemd 管理的服务日志、内核消息、系统启动过程等文本日志。cgroup 的 CPU、内存、IO 等实时资源使用情况属于内核运行时指标,由 cgroup 文件系统(如 /sys/fs/cgroup/)暴露,不写入 journal。
为什么 journalctl 查不到 cgroup 资源消耗
systemd 会为每个服务单元(如 nginx.service)自动创建对应的 cgroup,并把进程归入其中;但默认情况下,systemd 不主动将该 cgroup 的统计信息(如 memory.current、cpu.stat)写入 journal。journal 中可能仅包含服务启停、OOM killer 日志、或手动打的日志(比如用 logger 或 systemd-cat),而非周期性采集的资源快照。
如何间接关联服务与 cgroup 日志线索
若想通过 journalctl 排查某个服务的资源问题,可结合以下方式定位:
- 用
systemctl status 服务名查看其所属 cgroup 路径(例如Control Group: /system.slice/nginx.service) - 用
journalctl -u 服务名查看该服务的标准输出/错误日志,确认是否因内存不足被 kill(搜索OOM或Killed process) - 用
journalctl -t kernel | grep -i "out of memory\|cgroup"查找内核 OOM 或 cgroup 限流相关消息 - 启用 systemd 的资源监控日志(需配置):在
/etc/systemd/system.conf中设置DefaultLimitMEM=并开启LogLevel=info,部分资源事件(如超出限制)可能触发日志
真正查看 cgroup 资源消耗的正确方法
要获取指定 cgroup 的实时或历史资源数据,请直接读取 cgroup v2 文件系统(推荐)或使用工具:
- 查当前内存使用:
cat /sys/fs/cgroup/system.slice/nginx.service/memory.current - 查 CPU 使用统计:
cat /sys/fs/cgroup/system.slice/nginx.service/cpu.stat - 查 IO 使用:
cat /sys/fs/cgroup/system.slice/nginx.service/io.stat - 用
systemd-cgtop实时监控所有 cgroup 的资源占用(类似 top) - 用
systemd-cgls查看 cgroup 层级结构
如果真需要“日志化”cgroup 数据
可以自行脚本采集并写入 journal(供后续 journalctl 查询):
while true; do echo "$(date): $(cat /sys/fs/cgroup/system.slice/nginx.service/memory.current)" | systemd-cat -t cgroup-nginx; sleep 5; done
之后可用 journalctl -t cgroup-nginx 查看。


















