0

0

bpftrace 运行报 libbpf failed to load 的权限/内核版本兼容坑

冰川箭仙

冰川箭仙

发布时间:2026-01-24 15:27:57

|

529人浏览过

|

来源于php中文网

原创

bpftrace 报 libbpf failed to load 主因是内核不支持 BPF_PROG_TYPE_TRACING:需 Linux 5.5+、CONFIG_BPF_EVENTS=y/m、BTF 可用,且 kernel.unprivileged_bpf_disabled=0(非 root 时),同时确保 libbpf 版本匹配。

bpftrace 运行报 libbpf failed to load 的权限/内核版本兼容坑

bpftrace 报 libbpf failed to load:先看内核是否支持 BPF_PROG_TYPE_TRACING

这个错误绝大多数时候不是权限问题,而是内核太老或未启用关键配置。bpftrace 依赖 BPF_PROG_TYPE_TRACING(即 fentry/fexit 类型),它在 Linux 5.5+ 才稳定可用,且要求内核编译时开启 CONFIG_BPF_JITCONFIG_BPF_SYSCALL(通常默认开),但 CONFIG_BPF_EVENTS(对应 tracing program 支持)在某些发行版裁剪内核里是关闭的。

快速验证方式:

  • 运行 cat /boot/config-$(uname -r) | grep -E "BPF_(JIT|SYSCALL|EVENTS)",确认三者均为 ym
  • 检查内核版本:uname -r,低于 5.5 的内核即使配置全开,也可能因缺少 btf_vmlinux 或 fentry 注入逻辑而失败
  • 运行 bpftrace -e 'kprobe:do_sys_open { printf("hit\n"); }' —— 如果报 libbpf failed to load 且无更具体提示,大概率是内核不支持

权限不足时的真实表现和绕过方式

真正因权限失败时,错误通常附带 EPERM 或明确提到 cap_sys_admin,而不是笼统的 “failed to load”。bpftrace 默认需要 CAP_SYS_ADMIN(root 或 capability 授权),普通用户即使加了 sudo,若系统启用了 kernel.unprivileged_bpf_disabled=1(常见于 Ubuntu 22.04+、RHEL 9+),也会静默拒绝。

检查与临时放开(仅调试用):

  • 查看当前设置:sysctl kernel.unprivileged_bpf_disabled,返回 1 即禁用
  • 临时允许非特权加载:sudo sysctl kernel.unprivileged_bpf_disabled=0
  • 注意:该开关不影响 root 用户,只控制普通用户能否调用 bpf() 系统调用
  • 若仍失败,检查是否被 seccomp 或容器限制(如 Docker 默认禁用 AF_BPF socket)

libbpf 版本不匹配导致的符号缺失

bpftrace 静态链接 libbpf,但部分发行版(如 CentOS Stream 9、Debian 12)预装的 libbpf 过旧,或系统中存在多个版本冲突,导致运行时找不到 bpf_link__createbtf__parse_vmlinux 等符号 —— 此时错误仍显示为泛泛的 “failed to load”,实际是 dlopen 失败。

SpeechEasy
SpeechEasy

SpeechEasy是一种合成语音解决方案,可以让用户从文本生成高质量、易于理解的音频。

下载

排查步骤:

  • ldd $(which bpftrace) | grep bpf 看链接的是哪个 libbpf.so
  • 运行 bpftrace --version,对比其构建时的 libbpf commit(如 v1.3.0)与系统库版本
  • 最稳妥解法:从源码编译 bpftrace,确保与系统 libbpf 头文件和 so 一致;或使用官方预编译二进制(自带静态 libbpf)
  • 避免混用包管理器安装的 libbpf-dev 和手动编译的 bpftrace

内核 BTF 缺失或路径不对

bpftrace 在加载 tracing program 前会尝试读取内核 BTF(/sys/kernel/btf/vmlinux),用于参数解析和类型安全。若该文件不存在(常见于未启用 CONFIG_DEBUG_INFO_BTF=y 的内核),或路径被覆盖(如通过 BTF_DIR 环境变量指定错误路径),libbpf 会在加载阶段直接退出,并报 “failed to load”。

确认与修复:

  • 检查 BTF 是否可用:ls /sys/kernel/btf/vmlinux,无输出则内核未编译 BTF 支持
  • Ubuntu/Debian 用户需安装 linux-image-$(uname -r)-dbgsym 包(含 BTF)
  • CentOS/RHEL 用户需启用 debuginfo 仓库并安装 kernel-debuginfo
  • 可临时跳过 BTF 加载(功能受限):bpftrace -v -e 'kprobe:do_sys_open { @ = count(); }' 2>&1 | grep -A5 "BTF" 观察是否卡在此处

最容易被忽略的是:同一个错误信息背后,可能是内核版本、BTF、libbpf、权限四者中任意一个环节断掉。建议按 “内核版本 → BTF 存在性 → unprivileged_bpf_disabled 开关 → libbpf 符号版本” 顺序逐项排除,比反复加 sudo 更有效。

相关专题

更多
counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

198

2023.11.20

printf用法大全
printf用法大全

php中文网为大家提供printf用法大全,以及其他printf函数的相关文章、相关下载资源以及各种相关课程,供大家免费下载体验。

73

2023.06.20

fprintf和printf的区别
fprintf和printf的区别

fprintf和printf的区别在于输出的目标不同,printf输出到标准输出流,而fprintf输出到指定的文件流。根据需要选择合适的函数来进行输出操作。更多关于fprintf和printf的相关文章详情请看本专题下面的文章。php中文网欢迎大家前来学习。

282

2023.11.28

k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

257

2023.07.24

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

495

2024.04.08

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

400

2024.04.08

docker镜像有什么用
docker镜像有什么用

docker 镜像是预构建的软件组件,用途广泛,包括:应用程序部署:简化部署,提高移植性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

438

2024.04.08

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1353

2023.06.21

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.7万人学习

Git 教程
Git 教程

共21课时 | 2.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号