BCC 工具集:基于 eBPF 的现成内核追踪与排障命令
BCC(BPF Compiler Collection)把常用 eBPF 观测场景封装成一批独立命令,例如 execsnoop、opensnoop、biolatency、runqlat、tcplife。它们在内核态运行 eBPF 程序采集事件,在用户态汇总,通常比 strace 全量跟踪开销低。
/sys/kernel/btf/vmlinux。CAP_BPF/CAP_PERFMON 细分权限,但部分工具仍需 CAP_SYS_ADMIN 或可写 tracefs。bcc-tools,Debian/Ubuntu 用 bpfcc-tools。# 跟踪新进程的 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 查找。
uname -r 完全一致的 kernel-devel/linux-headers,容器内通常没有。-bpfcc 后缀,照 RHEL 文档直接敲 execsnoop 会 command not found。CAP_BPF/CAP_SYS_ADMIN、tracefs 和内核头文件,多数工具无法运行;应在宿主机或特权 DaemonSet 中执行。-p <PID>、过滤条件和有限时长缩小范围。Lost N events 说明 perf ring buffer 溢出,结果不完整;减少跟踪范围或在支持的工具上增大缓冲区。dmesg | grep -i lockdown 确认。/proc/<pid>/status 的 NSpid 换算。biolatency 与 iostat 看 I/O 延迟的角度有什么不同?Lost N events 时应该怎么处理?biolatency 在块层按请求统计延迟分布,能看到长尾;iostat 是设备级平均值,平均值会掩盖长尾。CAP_BPF/CAP_SYS_ADMIN、tracefs 挂载、内核头文件和 BTF,且 eBPF 程序作用在宿主机内核上。