准确锁定定时任务pid是关键,可用pgrep -f匹配命令行、ps -eo按启动时间排序或echo $$记录pid;再用pidstat -p配合间隔和选项(-u/-r/-d/-t/-l)实时监控cpu、内存、io及线程级指标。

直接用 pidstat -p 跟上定时任务的 PID,配合采样间隔和资源选项,就能持续观察它的 CPU、内存、IO 消耗。关键不是“怎么启动监控”,而是“怎么准确锁定那个正在跑的定时任务进程”。
先确认定时任务对应的 PID
后台定时任务(比如 cron 里跑的脚本)通常不长期驻留,而是按计划拉起新进程。所以每次执行都是独立 PID,不能靠查一次就一劳永逸。
- 如果是
cron触发的,可在任务命令前加echo $$ > /tmp/myjob.pid &&,把 PID 记下来再执行主逻辑 - 更通用的做法是运行时用
pgrep -f匹配完整命令行:比如任务是/usr/local/bin/backup.sh,就执行pgrep -f 'backup\.sh' - 如果任务刚启动,立刻用
ps -eo pid,cmd --sort=-start_time | head -n 5查最新几个进程,结合时间戳快速定位
用 pidstat 实时盯住它
拿到 PID 后,用带间隔的 pidstat -p 命令持续采样。别漏掉间隔参数,否则命令秒退:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 看 CPU 和内存:
pidstat -p 1234 -ur 1(每秒刷新一次) - 加 IO 监控:
pidstat -p 1234 -urd 2(每 2 秒刷一次,含读写速率) - 想看线程级细节(比如 Python 多线程脚本):加
-t,如pidstat -p 1234 -ut 1
应对短命任务:用 pgrep 动态绑定
很多定时任务只运行几秒,手动查 PID 再输命令容易错过。推荐用命令替换自动捕获:
-
pidstat -p "$(pgrep -f 'backup.sh')" -ur 0.5—— 每 0.5 秒重新查一次 PID,适合生命周期短的任务 - 如果匹配多个实例(如并发执行),
pgrep返回的多个 PID 会被pidstat自动支持,无需额外处理 - 加
-l显示完整命令行:pidstat -p "$(pgrep -f 'rsync -av')" -urdl 1,避免同名进程混淆
判断是否真有异常消耗
光看数值不够,得结合上下文解读:
- CPU 利用率显示 95%,但对应的是单核——如果机器是 8 核,实际只占约 12% 整机算力
- RSS 内存缓慢上涨,未必是泄漏;可能是缓存累积或 JVM 类加载,需配合
minflt/s和majflt/s看缺页行为 - IO 高但
%iowait很低,说明不是被磁盘卡住,而是主动发起大量小写操作










