首页/系统/Linux 内核与性能调优速查/bpftrace 入门与单行程序

bpftrace 入门与单行程序

bpftrace 用一行表达式描述内核事件统计, 适合临时观测: 运行到 Ctrl-C 后输出聚合结果。

单行程序入门

这个工具用一行表达式描述「在什么事件上做什么统计」,启动即编译并挂载,运行到手动中断后输出聚合结果。它把观测的编写成本压到很低,适合临时确认一个猜测,或者在写正式脚本之前先试跑表达式。表达式语法错误会在启动阶段直接报出,不会带病运行。

基本信息

适用平台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(); }'           # 观察切换频次

表达式构成

组成作用示例要点
探针位置决定在哪个事件上执行追踪点、内核函数、定时器等
过滤条件先判断再执行动作写在花括号之前
映射变量按键聚合结果键可以是进程名或参数值
聚合函数计数、求和、直方图中断后统一输出
先小窗口试跑再延长:确认输出量与开销符合预期之后再放到更长的观测窗口里,尤其是高频追踪点。
启动失败通常来自权限或内核选项限制,而不是表达式写错;报错信息里会区分这两类原因,处理方向不同。

易错点

  • 在无权限或内核未开启支持的环境运行失败,误以为是语法问题反复改表达式。
  • 长时间运行忘关,观测本身持续消耗资源。
  • 在高频事件上不加过滤,输出量失控且影响被测系统。
  • 把聚合结果当精确计数:部分探针在高频路径上会有额外开销与统计偏差。
  • 表达式字段名凭记忆写,启动报错后才发现追踪点字段与预期不同。

数据来源与参考

  • bpftrace 官方文档(quickstart)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌