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 失败。

ColorMagic
ColorMagic

AI调色板生成工具

下载

排查步骤:

  • 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 更有效。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

203

2023.11.20

printf用法大全
printf用法大全

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

76

2023.06.20

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

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

304

2023.11.28

k8s和docker区别
k8s和docker区别

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

280

2023.07.24

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

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

516

2024.04.08

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

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

416

2024.04.08

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

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

454

2024.04.08

Docker容器化部署与DevOps实践
Docker容器化部署与DevOps实践

本专题面向后端与运维开发者,系统讲解 Docker 容器化技术在实际项目中的应用。内容涵盖 Docker 镜像构建、容器运行机制、Docker Compose 多服务编排,以及在 DevOps 流程中的持续集成与持续部署实践。通过真实场景演示,帮助开发者实现应用的快速部署、环境一致性与运维自动化。

41

2026.02.11

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

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

精品课程

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

共48课时 | 10.5万人学习

Git 教程
Git 教程

共21课时 | 4.2万人学习

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

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