服务器随机丢包但 ping 延迟正常的 perf + bpftrace 抓包定位
发布时间 - 2026-01-25 00:00:00 点击率:次ping延迟正常但业务连接频繁超时或重传,因ping走独立ICMP路径,而TCP业务丢包可能发生在网卡驱动、软中断队列、GRO合并失败、XDP/tc策略等底层环节,需用eBPF和内核统计综合定位。
为什么 ping 延迟正常但业务连接频繁超时或重传
因为 ping 只发 ICMP Echo Request,走的是内核独立的 ICMP 处理路径,不经过 TCP/IP 栈的连接管理、队列调度、拥塞控制等环节。真实业务(如 HTTP、gRPC)用的是 TCP,丢包可能发生在:网卡驱动收包中断丢失、软中断队列溢出、sk_buff 分配失败、socket 接收缓冲区满、甚至 eBPF 程序中误 drop。此时 ping 依然能通,但 tcpdump 在应用侧抓不到包,说明丢包发生在更底层。
perf record -e 'net:netif_receive_skb' 抓不到丢包点怎么办
这个 tracepoint 只在数据帧成功进入协议栈第一入口时触发,如果丢包发生在网卡 DMA 后但尚未调用 netif_receive_skb()(比如 NAPI poll 被延迟、RX ring 溢出、驱动丢包),它就完全沉默。必须上到更底层:
- 用
perf record -e 'skb:kfree_skb'观察是否大量 skb 在极短时间内被释放,且comm字段为ksoftirqd或网卡驱动名(如ixgbe),说明软中断处理不过来 - 检查
/proc/net/snmp中Udp:行的noport和inerrors,或Tcp:行的EstabResets、AttemptFails—— 这些是内核统计的真实丢包信号 - 确认网卡是否启用了 LRO/GRO:
ethtool -k eth0 | grep gro;GRO 合并失败时可能静默丢弃分片,且不记入常规计数器
bpftrace 跟踪 sk_buff 生命周期的关键位置
不能只盯 netif_receive_skb,要串联从 DMA 到 socket 的完整链路。以下 bpftrace one-liner 可快速定位异常释放点:
bpftrace -e '
kprobe:__kfree_skb {
@kfree_reason[ksym(func)] = count();
}
kretprobe:dev_gro_receive /retval == NULL/ {
@gro_fail[ustack] = count();
}
tracepoint:skb:kfree_skb /args->reason == 12/ {
printf("DROPPED in %s (reason=12=SKB_DROP_REASON_PKT_TOO_SMALL)\n", ksym(args->func));
}'
注意:reason == 12 对应 SKB_DROP_REASON_PKT_TOO_SMALL,常见于 GRO 合并后校验失败;dev_gro_receive 返回 NULL 表示 GRO 流水线拒绝该包,往往因 IP ID 不连续或 TCP 选项不一致 —— 这类丢包不会进 tcpdump,但会显著影响长连接吞吐。
确认是否是 XDP 层或

如果服务器部署了 Cilium、Calico 或自定义 tc eBPF 策略,丢包可能发生在比 netif_receive_skb 更早的位置。检查:
-
tc filter show dev eth0 ingress—— 是否有bpf类型 filter 且 action 是drop -
ip link show eth0查看是否有xdp标记;再运行bpftool net show确认 XDP 程序挂载状态 - 用
bpftrace -e 'kprobe:generic_xdp_tx { @xdp_drop = count(); }'配合xdp:xdp_exceptiontracepoint,判断是否触发了 XDP 异常路径
这类丢包完全绕过内核协议栈,netstat -s 和 /proc/net/snmp 都不会体现,只能靠 eBPF 实时观测或驱动日志(dmesg | grep -i xdp)。
# 栈
# ai
# 网卡驱动
# 为什么
# echo
# NULL
# count
# Filter
# http
# udp
# tcpdump
# 发生在
# 的是
# 这类
# 时间内
# 自定义
# 只在
# 它就
# 上到
# 更早
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何快速启动建站代理加盟业务?
Laravel如何保护应用免受CSRF攻击?(原理和示例)
用v-html解决Vue.js渲染中html标签不被解析的问题
大型企业网站制作流程,做网站需要注册公司吗?
lovemo网页版地址 lovemo官网手机登录
如何用PHP快速搭建CMS系统?
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
js实现点击每个li节点,都弹出其文本值及修改
Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决
中国移动官方网站首页入口 中国移动官网网页登录
Laravel项目怎么部署到Linux_Laravel Nginx配置详解
简历没回改:利用AI润色让你的文字更专业
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解
详解Android中Activity的四大启动模式实验简述
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
如何在阿里云虚拟服务器快速搭建网站?
html5的keygen标签为什么废弃_替代方案说明【解答】
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
零服务器AI建站解决方案:快速部署与云端平台低成本实践
如何在阿里云域名上完成建站全流程?
如何在阿里云ECS服务器部署织梦CMS网站?
如何用虚拟主机快速搭建网站?详细步骤解析
实例解析angularjs的filter过滤器
canvas 画布在主流浏览器中的尺寸限制详细介绍
微信小程序 闭包写法详细介绍
如何快速完成中国万网建站详细流程?
如何在腾讯云服务器快速搭建个人网站?
Laravel如何使用Blade模板引擎?(完整语法和示例)
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
Bootstrap整体框架之JavaScript插件架构
Laravel如何配置和使用缓存?(Redis代码示例)
如何在云虚拟主机上快速搭建个人网站?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
Android GridView 滑动条设置一直显示状态(推荐)
昵图网官方站入口 昵图网素材图库官网入口
进行网站优化必须要坚持的四大原则
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
Laravel怎么使用artisan命令缓存配置和视图
JavaScript常见的五种数组去重的方式
Laravel如何使用withoutEvents方法临时禁用模型事件
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
php json中文编码为null的解决办法
Thinkphp 中 distinct 的用法解析
如何快速查询网站的真实建站时间?
个人摄影网站制作流程,摄影爱好者都去什么网站?

