短命进程追踪
按固定间隔采样的监控工具很容易漏掉一闪而过的进程:定时任务、失败重试、被守护进程拉起的临时脚本。这类观测工具在进程创建事件上捕获记录,把每一次启动都打印出来,包含父进程、进程号与完整命令行,因此能回答「到底是谁在反复拉起什么东西」。
基本信息
| 适用平台 | Linux,需要内核 eBPF 支持与较高权限 |
|---|---|
| 输出内容 | 父进程名、进程号、被启动命令与参数 |
| 常用参数 | 带时间戳输出,便于与日志对齐 |
| 输出量 | 取决于进程创建频率 |
| 建议做法 | 高频任务场景先限定时长再观察 |
典型使用场景
- 任务失败重试风暴:找出不断被拉起的脚本与其参数。
- 确认发布脚本或定时任务实际执行的命令,而不是配置里写的命令。
- 发现异常的守护进程重启,判断是崩溃拉起还是人为触发。
- 定位临时脚本的执行来源,追溯父进程链。
- 压测与联调期间确认应用是否在偷偷启动子进程。
用法
用法
execsnoop-bpfcc # 观察新进程启动
execsnoop-bpfcc -t # 带时间戳,便于与日志对齐
execsnoop-bpfcc -t | grep -v cron # 排除已知的定时任务干扰
execsnoop-bpfcc | head -50 # 先看前若干条,判断量级
timeout 30 execsnoop-bpfcc -t > /tmp/exec.log # 限时采集并留档输出列判读
| 列 | 含义 | 关注点 |
|---|---|---|
| 父进程名 | 谁拉起了这个进程 | 定时任务、发布脚本或守护进程 |
| 进程号与父进程号 | 进程与父进程编号 | 追溯进程家族关系 |
| 命令行参数 | 启动命令与参数 | 高频重试与异常参数 |
| 时间戳 | 启动时刻 | 与业务日志对齐 |
输出里的父进程名往往直接指向根因:看到同一父进程反复拉起同一个命令,问题通常出在它的调度逻辑或失败判断上,而不是被拉起的那个命令。
忙循环脚本或大规模任务调度场景输出量极大,可能淹没终端并给内核带来额外负担,务必先限定时长或重定向到文件。