Linux 网络丢包如何定位?

发布时间 - 2026-01-26 00:00:00    点击率:
网卡丢包排查应优先关注RX-OVR和RX-DRP:RX-OVR>0表示Ring Buffer溢出丢包,RX-DRP>0且RX-OVR==0说明内核处理阶段丢包,RX-ERR>0则指向物理链路问题。

先看网卡统计:RX-OVR 和 RX-DRP 是关键入口

丢包不一定在应用层,往往从网卡收包那一刻就开始了。真正该盯的第一个指标,是 netstat -i 输出里的 RX-OVR(Ring Buffer 溢出)和 RX-DRP(内核处理阶段丢包)。

  • RX-OVR > 0:说明网卡收包太快,内核来不及取走,Ring Buffer 满了直接丢——常见于高吞吐 + 单核软中断集中、或 Ring Buffer 太小(默认常为 256)
  • RX-DRP > 0RX-OVR == 0:包已进缓冲区,但被内核主动丢弃,原因可能是内存不足、softnet_stat 第2列持续增长、或 NAPI 轮询延迟高
  • RX-ERR > 0:物理链路大概率有问题,比如光衰超标、线缆接触不良、协商失败(ethtool eth0link detected: nospeed: Unknown!

别跳过这步直接抓包——如果 RX-OVR 已经在涨,tcpdump 就根本看不到那些“消失”的包。

检查 tc 规则:QoS 丢包不写进网卡计数器

网卡清白 ≠ 没丢包。tc 配置的 netempolicerfq_codel 等策略,会在协议栈更上层直接丢包,完全绕过 /proc/net/dev 统计。

  • 运行 tc -s qdisc show dev eth0,重点找含 losslimitrate 的行,例如:qdisc netem 800d: root ... loss 5%
  • 若看到 dropped X 且数值持续上升,基本就是它干的——尤其是测试环境残留的 netem,生产环境必须禁用
  • 清除规则用 tc qdisc del dev eth0 root(注意:不是所有场景都能直接删,确认无业务依赖)

很多人查完 netstat -i 没异常就放弃,结果漏掉这个最“安静”的丢包源。

盯住软中断和 Ring Buffer 设置

即使 RX-OVR == 0,也可能因 Ring Buffer 偏小 + CPU 负载高导致消费滞后。这时要交叉验证:

  • 查中断分布:cat /proc/interrupts | grep eth0,看是否全压在 CPU0 上;若某核 SI(softirq)软中断长期 >70%,说明 NAPI 处理不过来
  • 查 softnet 队列状态:cat /proc/net/softnet_stat,第1列(processed)和第2列(dropped)比值骤降,或第2列稳定上涨,就是 softnet backlog 溢出
  • 调大 Ring Buffer:ethtool -G eth0 rx 4096 tx 4096(需驱动支持,部分虚拟网卡不生效)
  • 启用 RPS 分散软中断:echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus(十六进制掩码,f=全开前4核)

Ring Buffer 不是越大越好——过大会增加 cache miss,一般 1024~4096 是较安全的起步值。

别绕过物理层和驱动日志

最基础的环节,反而最容易被跳过。很多“随机丢包”其实是线缆松动、光模块老化、或驱动 bug 导致的。

  • ethtool eth0 确认:Link detected: yesSpeed: 10000Mb/sDuplex: FullFEC: auto;若出现 Auto-negotiation: offfailed,手动协商或换线
  • 驱动报错:dmesg | grep -i "eth\|nic\|firmware\|dma",重点关注 DMA timeoutfirmware hangreset failed
  • 旧版 Intel X710 / Mellanox CX-5 驱动存在 Ring Buffer 竞态丢包缺陷,更新固件和驱动常能一招解决

真正的瓶颈,往往不在你怀疑的地方——它可能就藏在 ethtool 输出里一行不起眼的 Link detected: no 后面。


# linux  # go  #   # ai  # echo  # auto  # class  # tcpdump  # bug  # 跳过  # 链路  # 第一个  # 尤其是  # 都能  # 很多人  # 会在  # 满了  # 越好  # 那一刻 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 浅谈Javascript中的Label语句  如何在云主机上快速搭建网站?  电商网站制作价格怎么算,网上拍卖流程以及规则?  Laravel如何实现API资源集合?(Resource Collection教程)  Laravel如何处理异常和错误?(Handler示例)  怎么用AI帮你设计一套个性化的手机App图标?  *服务器网站为何频现安全漏洞?  Laravel如何创建自定义Facades?(详细步骤)  制作旅游网站html,怎样注册旅游网站?  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  微信小程序 require机制详解及实例代码  Android利用动画实现背景逐渐变暗  香港服务器WordPress建站指南:SEO优化与高效部署策略  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  如何在云服务器上快速搭建个人网站?  如何在万网主机上快速搭建网站?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  使用豆包 AI 辅助进行简单网页 HTML 结构设计  JavaScript如何实现路由_前端路由原理是什么  佛山网站制作系统,佛山企业变更地址网上办理步骤?  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  如何快速搭建高效WAP手机网站吸引移动用户?  java中使用zxing批量生成二维码立牌  如何在自有机房高效搭建专业网站?  如何在阿里云香港服务器快速搭建网站?  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  Android自定义listview布局实现上拉加载下拉刷新功能  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  中山网站制作网页,中山新生登记系统登记流程?  网页设计与网站制作内容,怎样注册网站?  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  javascript日期怎么处理_如何格式化输出  Laravel如何生成API文档?(Swagger/OpenAPI教程)  Laravel如何实现本地化和多语言支持?(i18n教程)  QQ浏览器网页版登录入口 个人中心在线进入  Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复  Python文件异常处理策略_健壮性说明【指导】  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  如何在阿里云虚拟服务器快速搭建网站?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  Laravel Fortify是什么,和Jetstream有什么关系  简历没回改:利用AI润色让你的文字更专业  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  详解CentOS6.5 安装 MySQL5.1.71的方法  Windows Hello人脸识别突然无法使用