首页/系统/Linux 内核与性能调优速查/execsnoop 短命进程追踪

execsnoop 短命进程追踪

捕获新进程的启动记录, 用于发现脚本拉起、定时任务与异常重试等难观测行为。

短命进程追踪

按固定间隔采样的监控工具很容易漏掉一闪而过的进程:定时任务、失败重试、被守护进程拉起的临时脚本。这类观测工具在进程创建事件上捕获记录,把每一次启动都打印出来,包含父进程、进程号与完整命令行,因此能回答「到底是谁在反复拉起什么东西」。

基本信息

适用平台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   # 限时采集并留档

输出列判读

列含义关注点
父进程名谁拉起了这个进程定时任务、发布脚本或守护进程
进程号与父进程号进程与父进程编号追溯进程家族关系
命令行参数启动命令与参数高频重试与异常参数
时间戳启动时刻与业务日志对齐
输出里的父进程名往往直接指向根因:看到同一父进程反复拉起同一个命令,问题通常出在它的调度逻辑或失败判断上,而不是被拉起的那个命令。
忙循环脚本或大规模任务调度场景输出量极大,可能淹没终端并给内核带来额外负担,务必先限定时长或重定向到文件。

易错点

  • 忙循环脚本场景输出量极大,终端被刷屏且难以提取关键信息。
  • 参数显示为空白就判断命令不存在,实际可能是参数截断或读取限制,需要按完整输出判断。
  • 不排除已知的定时任务,真正的异常启动被大量正常记录淹没。
  • 采集时间太短,错过周期较长的定时任务触发时刻。
  • 只看被启动的命令不看父进程,追不到真正的触发方。

数据来源与参考

  • BCC 工具集文档 execsnoop
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌