单行程序入门
这个工具用一行表达式描述「在什么事件上做什么统计」,启动即编译并挂载,运行到手动中断后输出聚合结果。它把观测的编写成本压到很低,适合临时确认一个猜测,或者在写正式脚本之前先试跑表达式。表达式语法错误会在启动阶段直接报出,不会带病运行。
基本信息
| 适用平台 | Linux,需要内核 eBPF 支持与相应权限 |
|---|---|
| 程序结构 | 探针位置、可选的过滤条件、要执行的动作 |
| 常见聚合 | 计数、求和、直方图与映射变量 |
| 结束方式 | 手动中断,或使用定时器在指定时刻输出 |
| 启动开销 | 启动时编译表达式,之后开销取决于探针频率 |
典型使用场景
- 临时统计某类事件在各个进程上的分布,确认谁在频繁触发。
- 核对追踪点的字段名与类型,为写正式脚本做准备。
- 快速确认某个内核函数的调用频率是否符合预期。
- 线上应急做低开销观测,避免部署新工具。
- 在容器或云主机上做只读观测,不修改应用。
单行示例
单行示例
bpftrace -e 'tracepoint:syscalls:sys_enter_openat { @[comm] = count(); }' # 按进程统计
bpftrace -e 'tracepoint:syscalls:sys_enter_execve { @[comm] = count(); }' # 谁在启动新进程
bpftrace -e 'kprobe:vfs_read { @bytes = hist(arg2); }' # 参数分布直方图
bpftrace -e 'interval:s:5 { print(@); clear(@); }' # 每 5 秒输出一次并清空
bpftrace -e 'tracepoint:sched:sched_switch { @[comm] = count(); }' # 观察切换频次表达式构成
| 组成 | 作用 | 示例要点 |
|---|---|---|
| 探针位置 | 决定在哪个事件上执行 | 追踪点、内核函数、定时器等 |
| 过滤条件 | 先判断再执行动作 | 写在花括号之前 |
| 映射变量 | 按键聚合结果 | 键可以是进程名或参数值 |
| 聚合函数 | 计数、求和、直方图 | 中断后统一输出 |
先小窗口试跑再延长:确认输出量与开销符合预期之后再放到更长的观测窗口里,尤其是高频追踪点。
启动失败通常来自权限或内核选项限制,而不是表达式写错;报错信息里会区分这两类原因,处理方向不同。