Linux服务器网卡丢包故障排查指南
前言
网卡丢包是服务器运维中常见却棘手的问题,轻则导致业务延迟升高,重则造成服务不可用。本文从系统层到硬件层,梳理网卡丢包的常见原因及排查方法。
一、快速定位丢包方向
发现业务异常时,先确认是否为网卡丢包。查看网卡统计信息:
1 | # 查看网卡接口状态和统计 |
若 drops 列持续增长,说明网卡正在丢包。进一步查看详细计数:
1 | # 查看网卡详细错误计数 |
二、查看网卡协商状态与工作模式
速率不匹配、双工模式错误是常见丢包原因:
1 | # 查看网卡协商的速率和双工模式 |
常见异常情况:
- 速率显示 10Mbps 而预期是 1Gbps
- 双工模式显示 half 而非 full
- 协商结果显示 “Unknown!”
发现协商异常时,尝试强制指定速率:
1 | # 强制千兆全双工 |
三、检查网卡驱动和固件
过时或有bug的驱动会导致异常丢包:
1 | # 查看网卡驱动信息 |
关注 driver、version、firmware-version 版本号,与厂商最新版本对比。更新驱动:
1 | # 确认驱动源码 |
四、检查硬件和连接
物理层问题不易从系统层面发现:
1 | # 检查网卡端口状态灯(设备面板) |
使用光模块时,确认模块型号与网卡兼容:
1 | # 查看光模块信息(部分网卡支持) |
五、系统网络缓冲区检查
内存不足导致 skb 无法分配,会表现为丢包:
1 | # 查看网络内存统计 |
Ring buffer 偏小会导致高速网卡丢包:
1 | # 增大 ring buffer(需网卡支持) |
六、中断与 CPU 亲和性
中断分配不均会导致部分 CPU 繁忙,网卡驱动无法及时处理数据包:
1 | # 查看网卡中断号 |
将网卡中断绑定到空闲 CPU:
1 | # 获取网卡中断号 |
七、NIC Offload 功能的影响
部分 offload 功能在特定场景下会引起丢包:
1 | # 关闭 GRO/GSO/GCO 测试 |
八、网络队列与流量控制
交换机端开启流量控制时,服务器端未匹配会导致丢包:
1 | # 查看流量控制状态 |
检查多队列配置:
1 | # 确认队列数量 |
九、综合排查思路总结
| 步骤 | 检查项 | 工具/命令 |
|---|---|---|
| 1 | 确认丢包存在 | ip -s link show |
| 2 | 查看网卡状态 | ethtool eth0 |
| 3 | 检查驱动版本 | ethtool -i eth0 |
| 4 | 检查物理连接 | 面板灯/换网线 |
| 5 | 检查缓冲区 | ethtool -g eth0 |
| 6 | 检查中断分布 | /proc/interrupts |
| 7 | 测试 offload | ethtool -K |
| 8 | 检查流量控制 | ethtool -a eth0 |
结语
网卡丢包排查需由表及里,从系统统计到驱动、从驱动到硬件逐层定位。建议在故障恢复后建立监控基线,将 ethtool -S 的关键计数器纳入采集范围,便于提前发现隐患。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 体系所运维知识库!