bcc-tools

BCC 工具集:基于 eBPF 的现成内核追踪与排障命令

补充说明

BCC(BPF Compiler Collection)把常用 eBPF 观测场景封装成一批独立命令,例如 execsnoop、opensnoop、biolatency、runqlat、tcplife。它们在内核态运行 eBPF 程序采集事件,在用户态汇总,通常比 strace 全量跟踪开销低。

常用示例

# 跟踪新进程的 exec 参数,最常用的环境验证命令
sudo /usr/share/bcc/tools/execsnoop

# 块设备 I/O 延迟直方图,-m 以毫秒为单位
sudo /usr/share/bcc/tools/biolatency -m

# 只观察慢于 10ms 的 ext4 读取
sudo /usr/share/bcc/tools/ext4slower 10

# 统计 TCP 连接的建立、关闭与传输字节数
sudo /usr/share/bcc/tools/tcplife

# 统计各进程在 CPU 运行队列中的等待时间分布
sudo /usr/share/bcc/tools/runqlat

# 查看工具自带帮助和可用过滤选项
sudo /usr/share/bcc/tools/biolatency -h

Debian/Ubuntu 的可执行文件通常带 -bpfcc 后缀,例如 execsnoop-bpfcc;不确定路径时用 dpkg -L bpfcc-tools | grep bin 查找。

易错点与排错

读完自测

  1. biolatency 与 iostat 看 I/O 延迟的角度有什么不同?
  2. 为什么在容器里运行 BCC 工具经常失败?
  3. 看到 Lost N events 时应该怎么处理?
答案
  1. biolatency 在块层按请求统计延迟分布,能看到长尾;iostat 是设备级平均值,平均值会掩盖长尾。
  2. 容器通常缺少 CAP_BPF/CAP_SYS_ADMIN、tracefs 挂载、内核头文件和 BTF,且 eBPF 程序作用在宿主机内核上。
  3. 说明事件没来得及被用户态读走;应缩小 PID/事件范围、缩短运行时间,或在支持的工具上增大 ring buffer。

相关条目