linux动态内核追踪工具是什么-bpftrace 命令使用与实例

2025-07-01 141182 电脑系统

Linux bpftrace 命令


bpftrace 是一个基于 eBPF (扩展伯克利包过滤器) 的高级追踪工具,它允许开发者在不修改内核代码的情况下,动态地观察和分析 Linux 系统的运行状态。

eBPF 是 Linux 内核中的一项革命性技术,它提供了一个安全的虚拟机环境,可以在内核中运行用户定义的代码。bpftrace 构建在 eBPF 之上,提供了一个更简单、更高级的抽象层。


bpftrace 的核心优势

实时系统观测

  • 无需重启系统或应用
  • 极低的性能开销
  • 可以观测内核和用户空间程序

灵活的探测能力

  • 支持多种探测点类型:函数入口/出口、定时器、硬件事件等
  • 可以追踪系统调用、网络事件、磁盘 I/O 等

简单的脚本语言

  • 类似 AWK 的语法,学习曲线平缓
  • 内置丰富的函数和变量
  • 支持条件过滤和聚合统计

bpftrace 安装与配置

安装方法

实例

# Ubuntu/Debian
sudo apt install bpftrace

# CentOS/RHEL
sudo yum install bpftrace

# 从源码编译
git clone https://github.com/iovisor/bpftrace.git
mkdir bpftrace/build && cd bpftrace/build
cmake ..
make
sudo make install

验证安装

sudo bpftrace -e 'BEGIN { printf("Hello, bpftrace!n"); }'

bpftrace 基本语法

bpftrace 程序由探测点(probe)和关联的动作(action)组成,基本结构如下:

probe /filter/ {
    action
}

探测点类型

探测点类型 描述 示例
kprobe 内核函数入口 kprobe:vfs_read
kretprobe 内核函数返回 kretprobe:vfs_read
uprobe 用户空间函数入口 uprobe:/bin/bash:readline
tracepoint 内核静态追踪点 tracepoint:syscalls:sys_enter_open
interval 定时触发 interval:s:5
software 软件事件 software:faults:major

常用内置变量

  • pid:当前进程 ID
  • tid:当前线程 ID
  • comm:当前进程名
  • nsecs:纳秒级时间戳
  • arg0-argN:函数参数
  • retval:函数返回值

bpftrace 实用示例

1. 追踪系统调用

实例

# 统计 open 系统调用的次数
sudo bpftrace -e 'tracepoint:syscalls:sys_enter_open { @[comm] = count(); }'

2. 分析函数执行时间

实例

# 测量 vfs_read 的执行时间
sudo bpftrace -e '
kprobe:vfs_read { @start[tid] = nsecs; }
kretprobe:vfs_read /@start[tid]/ {
    @times = hist(nsecs - @start[tid]);
    delete(@start[tid]);
}'

3. 监控进程的文件访问

实例

# 跟踪指定进程打开的文件
sudo bpftrace -e 'tracepoint:syscalls:sys_enter_openat /pid == 1234/ { printf("%s -> %sn", comm, str(args->filename)); }'

4. 统计 TCP 连接

实例

# 按进程统计 TCP 连接数
sudo bpftrace -e 'kprobe:tcp_connect { @[comm] = count(); }'


bpftrace 高级特性

1. 地图(Map)功能

bpftrace 提供了多种内置地图类型用于数据聚合:

实例

# 统计直方图
@hist = hist(nsecs);

# 计算平均值
@avg = avg(nsecs);

# 统计唯一值
@unique = count();

2. 条件过滤

实例

# 只追踪特定进程的 read 调用
tracepoint:syscalls:sys_enter_read /pid == 1234/ {
    printf("PID %d reading %d bytesn", pid, args->count);
}

3. 多探针组合

实例

# 跟踪从 socket 创建到连接的全过程
kprobe:sock_alloc {
    @socket[tid] = 1;
}

kprobe:tcp_connect /@socket[tid]/ {
    printf("socket %d connecting to %s:%dn", args->sock->__sk_common.skc_dport,
           ntop(args->sock->__sk_common.skc_daddr),
           args->sock->__sk_common.skc_dport);
    delete(@socket[tid]);
}


bpftrace 最佳实践

  1. 限制追踪范围:使用 PID 或命令名过滤,减少系统开销
  2. 避免过度打印:过多的 printf 会影响性能
  3. 使用聚合:尽量使用 count()、sum() 等聚合函数
  4. 清理资源:长时间运行的脚本要定期清理地图数据
  5. 安全考虑:bpftrace 需要 root 权限,谨慎运行未知脚本

bpftrace 与其他工具对比

工具 优点 缺点
bpftrace 灵活、高性能、易用 需要 root 权限
strace 简单、无需编译 性能开销大
perf 功能全面、低开销 学习曲线陡峭
SystemTap 功能强大 需要编译、配置复杂

学习资源推荐

  1. bpftrace 官方文档
  2. bpftrace 单行教程
  3. bpftrace 示例仓库

bpftrace 是系统性能分析和故障排查的强大工具,通过实践这些示例和掌握其核心概念,你将能够更深入地理解和优化 Linux 系统的运行行为。


以上就是linux动态内核追踪工具是什么-bpftrace 命令使用与实例的详细内容,更多请关注比你酷【www.biniku.com】。

Mac系统怎么查看当前系统的确切内核版本

最简捷权威的方式是执行终端命令uname-r,直接输出Darwin内核确切版本号(如24.3.0),该值由内核自身声明,无需推断或查表,且与系统报告、sysctlkern.osproductversion及官方映射一致。 要确认当前Mac系统运行的Darwin内核确切版本号(例如24.3.0),必须获取由内核直接输出的原始标识字符串,而非仅依赖macOS用户界面显示的操作系统主版本;因为同一mac...

如何查看vivo浏览器当前正在使用的底层Webview内核版本号?

vivo浏览器实际调用的底层Webview内核版本需通过三种方式确认:1.访问https://liulanmi.com/labs/core.html直接检测;2.在系统设置中查看AndroidSystemWebView应用版本;3.从User-Agent字符串中提取Chrome/后的版本号。 要确认vivo浏览器当前实际调用的底层Webview内核版本,不能只看浏览器应用自身的版本号,因为vivo...

准雨天气怎么设置旅游目的地天气追踪

准雨天气支持手动添加并追踪多个旅游城市天气,需开启定位权限后通过首页右上角【+】添加城市;可置顶或开启同步推送实现常驻追踪;支持滑动切换、详情查看及双城温差对比。 想在出行前就掌握旅游目的地的实时天气变化,避免到了当地才发现暴雨或高温,准雨天气支持手动添加并追踪多个旅游城市天气。操作路径清晰,但入口藏得稍深,容易在首页反复滑动却找不到添加按钮。 添加旅游目的地城市 打开准雨天气App,确保已开启定...

MacBook 出现“内核崩溃”自动重启怎么办?查看崩溃日志寻找原因【干货】

MacBook出现六国语言重启提示即KernelPanic,需通过控制台、终端命令、诊断报告及内核日志分析shutdowncause代码、唤醒日志和第三方驱动(如NemuDrv)定位根本原因。 如果您在MacBook上遭遇“因出现问题而重新启动”的六国语言提示,伴随自动重启现象,则极可能发生了内核崩溃(KernelPanic),其根本原因通常隐藏在系统自动生成的崩溃日志中。以下是直接定位崩溃诱因的...

修复Windows 11提示“此驱动程序无法在此设备上加载” 修复内核完整性

应关闭内存完整性、禁用易受攻击驱动程序阻止列表、用pnputil清理残留驱动包、在安全模式下重装驱动。该提示源于Win11内核完整性机制拦截未认证或过时驱动,上述四步可协同解决。 当你在Windows11中安装指纹识别器、USB-C扩展坞、老款打印机或自定义显卡驱动时,突然弹出“此驱动程序无法在此设备上加载”提示,说明系统内核完整性机制已主动拦截该驱动——它不是安装失败,而是被安全策略当场拒绝加载...

如何开启 Windows 11 的“内核隔离”保护 提高系统内存完整性安全性设置

内存完整性不可用需排查硬件虚拟化、驱动冲突或策略锁定;可通过Windows安全中心、组策略(专业版及以上)或注册表(家庭版适用)三种方式启用,均须重启生效。 您需要在Windows11中启用“内核隔离”功能来防止恶意代码篡改系统核心进程,但设置界面中“内存完整性”开关显示为灰色不可用,或点击开启后提示不兼容、重启无效——这通常是因为硬件虚拟化未就绪、驱动冲突或系统策略锁定所致。 通过Windows...

vivo浏览器怎么开启禁止跟踪功能_vivo浏览器防追踪隐私保护

必须立即启用禁止跟踪功能以切断跨站行为画像的数据链路,具体包括开启防第三方Cookie跟踪、智能拦截追踪器、发送DNT信号、禁用高风险域名JavaScript权限及使用无痕浏览模式。 您在vivo浏览器中频繁遭遇广告精准推送、页面内容自动适配个人偏好,或访问金融类网站时地址栏突然弹出位置请求提示,说明第三方追踪脚本已在后台持续采集设备指纹、Cookie与地理信息——必须立即启用禁止跟踪功能,切断跨...

修复Windows 11蓝屏代码0x00000139 系统内核安全检查失败解决方法汇总

0x00000139蓝屏主因是内核关键数据结构损坏,需先安全模式卸载可疑驱动、禁用非微软启动项、运行SFC/DISM修复,再禁用XMP切JEDEC频率、手动降频调时序、用Windows内存诊断和MemTest86验证硬件稳定性,并更新BIOS及启用驱动验证器精准定位故障源。 当你在Windows11中频繁遭遇蓝屏,错误代码明确显示为0x00000139并提示KERNEL_SECURITY_CHEC...