用 pidstat -p PID 加采样间隔可持续监控守护进程资源占用,关键在于准确获取稳定PID(如systemctl show -p MainPID或pgrep -f)、合理选参(-urwd等)并规避权限、容器命名空间等常见坑点。

直接用 pidstat -p PID 加采样间隔,就能持续监控后台守护进程的 CPU、内存、IO 等真实占用,关键是要准确获取 PID 并选对参数组合。
先确认守护进程 PID 是否稳定存在
很多守护进程(如 nginx、redis-server、rsyslogd)启动后 PID 不变,但有些会因重启、reload 或 systemd 重启策略而变化。别依赖一次查到的 PID 长期使用:
- 用
systemctl show -p MainPID your-service.service获取 systemd 管理的服务主 PID(最可靠) - 或用
pgrep -f "redis-server"匹配完整命令行,避免匹配到子进程或残留进程 - 检查 PID 对应进程是否仍在运行:
kill -0 $(pgrep -f "your-daemon") && echo "alive" || echo "gone"
监控 CPU 和内存占用(最常用组合)
后台服务通常长期运行,关注其稳态资源消耗:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 每 2 秒刷新一次 CPU + 内存:
pidstat -p $(pgrep -f "nginx: master") -ur 2 - 加
-l显示完整命令行,确认没匹配错进程:pidstat -p $(pgrep -f "nginx") -ur -l 2 - 注意
%CPU是单核百分比(多线程满载 4 核可能显示 ~400.00),RSS是实际物理内存(KB),比VSZ更反映真实压力
排查 I/O 或上下文切换异常
某些守护进程(如日志收集器、数据库代理)会在特定负载下暴露出 I/O 或调度问题:
- 加
-d看磁盘读写:pidstat -p $(pgrep -f "filebeat") -d 3,观察kB_wr/s和%iowait - 加
-w查非自愿切换:pidstat -p $(pgrep -f "prometheus") -w 1,若nvcswch/s持续高于 100,说明 CPU 竞争激烈或锁等待严重 - 组合使用更高效:
pidstat -p $(pgrep -f "grafana-server") -urwd 2
避免常见坑点
守护进程常以非 root 用户运行,权限和采样精度容易出错:
- 普通用户无法监控 root 进程(如 systemd、dbus),会显示 “Permission denied” 或空白;需 sudo 或切换到对应用户执行
- 不带间隔参数(如
pidstat -p 1234)会立刻退出,什么也不输出——必须指定数字,哪怕写1 - 短生命周期守护进程(如某些 oneshot 类型)可能在采样间隙退出,导致数据断续;可尝试缩短间隔至
0.5,但别低于0.1 - 容器内运行时,宿主机上看到的 PID 是容器命名空间内的值,要和容器内
ps输出一致,否则监控对象错位

















