Linux怎么使用eBPF工具排查极其隐蔽的性能瓶颈

风芳酱_5982

风芳酱_5982

2026-09-30

964人浏览

原创

ebpf 不是用来替代 top 或 perf 的,而是当 perf 火焰图满是内核符号、strace 挂上即卡、业务日志查不到延迟毛刺时,唯一能穿透内核执行路径的活体探针。

linux怎么使用ebpf工具排查极其隐蔽的性能瓶颈

直接上结论:eBPF 不是用来“替代 top 或 perf”的,而是当你发现 perf 火焰图里全是内核符号、strace 挂上去就卡死、业务日志里查不到延迟毛刺时,唯一能穿透到内核执行路径内部的活体探针。

为什么传统工具在隐蔽瓶颈前集体失效

典型现象包括:接口 P99 延迟突增但 CPU 使用率平稳;某个微服务偶发 500ms+ 延迟,perf record -e cycles,uops_issued.any 却显示无热点;strace -p 一挂上,问题反而消失。这些不是假象,是传统工具的固有盲区:

  • strace 依赖 ptrace,每次系统调用都会触发上下文切换和信号拦截,在高并发下引入毫秒级干扰,掩盖真实行为
  • perf 默认采样基于硬件事件(如 cycles),对短时抖动、锁竞争、调度延迟等非 CPU-bound 问题不敏感
  • 应用层 APM(如 SkyWalking)看不到内核态阻塞点,比如 tcp_sendmsg 卡在 sk_stream_wait_memory、或 do_sys_open 被 inode_lock 拖住

用 bpftrace 快速定位“看不见”的阻塞点

bpftrace 是最轻量、最贴近实战的 eBPF 入口,无需写 C、不用编译,一条命令就能验证假设。关键不是“看全”,而是“精准打点”:

  • 怀疑网络发送卡在内存等待?运行:bpftrace -e 'kprobe:tcp_sendmsg { @start[tid] = nsecs; } kretprobe:tcp_sendmsg /@start[tid]/ { $d = (nsecs - @start[tid]) / 1000000; if ($d > 10) {@us[comm, $d] = count();} delete(@start[tid]); }'
  • 想确认是否被文件锁阻塞?用:bpftrace -e 'kprobe:__flock64 { printf("flock on %s by %s\n", comm, str(args->filp->f_path.dentry->d_name.name)); }'
  • 排查调度延迟?直接抓 sched_wakeup 到实际运行的时间差:bpftrace -e 'kprobe:sched_wakeup { @start[pid] = nsecs; } kprobe:finish_task_switch /@start[pid]/ { $delay = nsecs - @start[pid]; if ($delay > 1000000) {@wakeup[comm, $delay/1000000] = count();} delete(@start[pid]); }'

注意:所有 kprobe 和 kretprobe 名称必须与当前内核符号严格一致(可用 sudo cat /proc/kallsyms | grep tcp_sendmsg 核对),函数参数访问需用 args->xxx 且不能越界——这是 verifier 拦截最多的地方。

Computer Use Linux
Computer Use Linux

顶级 Linux 计算机使用技能,配套独立自举运行时,无需本地 Claude 安装、私有原生模块等。

下载

tcprtt 和 profile 工具组合识别微秒级抖动源

当瓶颈表现为网络 RTT 分布长尾(比如 95% 在 1ms 内,但总有 0.1% 超过 50ms),单靠 ping 或 tcpdump 无法归因。此时要用内核协议栈原生统计:

  • tcprtt 直接从 TCP 控制块读取 RTT 样本,不依赖抓包:sudo tcprtt -i 1 -d 10 输出中若出现 “8 -> 15 : 23” 这类跨数量级分布,说明存在链路抖动或接收端处理延迟
  • 进一步定位是本机还是远端问题?配合 bpftrace -e 'profile:hz:99 /pid == 1234/ {@ns[ustack] = count();}' 抓目标进程的用户态栈,看是否卡在 SSL write 或 gRPC 序列化;再用 sudo bpftool prog list | grep sched 查是否有自定义 BPF 调度器干扰
  • 如果抖动集中在特定 CPU 上,检查该 CPU 是否被 irqbalance 锁定、是否有 NIC 中断集中绑定——这时 bpftrace -e 'kprobe:handle_irq { @irq[cpu] = count(); }' 能快速暴露中断倾斜

容易被忽略的三个硬约束

eBPF 强大但有边界,踩坑往往不是因为不会用,而是没看清限制:

  • 内核版本必须 ≥ 4.18(推荐 ≥ 5.4),否则 kretprobe 对某些函数不可用,tcprtt 也不存在
  • 所有 eBPF 程序加载前必过 verifier,禁止循环、禁止未初始化变量、禁止直接访问结构体嵌套字段(必须用 bpf_probe_read_kernel 安全读取)
  • 生产环境慎用 uprobe 跟踪用户态函数——若目标进程是 JIT 编译语言(Go/Java),函数地址会动态变化,导致 probe 失效或 crash

真正难的从来不是写出第一条 bpftrace 命令,而是读懂输出里那个 @us[nginx, 42] 后面的 42 毫秒,到底来自 socket buffer 拥塞、TCP retransmit,还是 cgroup cpu bandwidth 限频。这需要你同时理解内核网络栈、调度器行为和业务流量模型。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

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

2023.06.21

3750

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3253

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2333

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

5610

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5282

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3133

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2645

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

2859

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

277

3

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习