诊断Linux网络接口物理性能下降,需先用ip link show检查UP和LOWER_UP状态及NO-CARRIER标志,再用ethtool查看Link detected、Speed、Duplex、Auto-negotiation等硬件协商指标,结合dmesg日志和ethtool -S统计计数器(如rx_crc_errors、rx_errors)定位链路误码或驱动问题。

诊断 Linux 网络接口物理性能下降,关键在于聚焦物理层和数据链路层的可观测指标,而非直接跳到上层配置或应用问题。多数性能下滑其实源于硬件连接、驱动协商或链路质量退化,这些都能通过命令行快速验证。
检查接口状态与物理连通性
先确认网卡是否被系统识别且链路已建立:
- 运行 ip link show,查看目标接口(如 eno1、ens33)是否显示 UP 和 LOWER_UP;若只有 UP 而无 LOWER_UP,说明软件启用但物理链路未通
- 观察输出中是否有 NO-CARRIER 标志——这明确表示未检测到载波信号,常见于网线松动、对端设备断电、交换机端口关闭或光纤收发异常
- 对比同台机器其他接口(如 lo 或 wlan0)的状态,排除全局内核或 systemd-networkd 异常
用 ethtool 深挖硬件级协商细节
ethtool 是判断物理性能退化的最直接工具,它能暴露自动协商失败、速率降级、双工不匹配等隐性问题:
- 执行 ethtool eth0(替换为实际接口名),重点关注以下字段:
• Link detected: yes/no —— no 表示物理中断,需排查网线、模块、交换机端口
• Speed: 若从 1000Mb/s 降至 100Mb/s 或 10Mb/s,大概率是自动协商失败或线缆质量下降(如超五类线老化、水晶头氧化)
• Duplex: Full/ Half —— 出现 Half 时,常因两端双工模式不一致引发冲突与重传
• Auto-negotiation: on/off —— off 可能是手动强制设置,也可能是协商过程被干扰(如中间存在不支持 AN 的老式集线器) - 若发现协商异常,可尝试临时关闭自动协商并手动指定(仅用于测试):
sudo ethtool -s eth0 speed 1000 duplex full autoneg off
注意:该设置重启后失效,且需确保对端设备支持相同配置
排查驱动与固件兼容性问题
某些性能下降并非链路本身故障,而是驱动或固件缺陷导致的异常行为:
- 运行 lspci -k | grep -A 3 -i ethernet 查看网卡型号及当前加载的驱动模块(如 igb、ixgbe、r8169)
- 搜索该驱动版本是否存在已知问题(例如 r8169 在部分 Realtek 千兆卡上长期存在丢包与速率不稳定报告);考虑切换至厂商提供的专用驱动(如 r8168 替代 r8169)
- 检查固件版本:sudo ethtool -i eth0 输出中的 firmware-version 字段,比对厂商最新固件发布说明,确认是否存在修复性能相关 bug 的更新
- 观察 dmesg 日志中是否有重复出现的警告,如 “link up/down flapping”、“reset failed”、“DMA timeout”,这类信息往往指向硬件或驱动层面的深层问题
验证链路误码与丢包源头
即使链路看似稳定,底层误码也可能持续造成 TCP 重传,表现为高延迟、低吞吐:
- 使用 ethtool -S eth0 查看统计计数器,重点关注:
• rx_errors / tx_errors —— 非零值需警惕
• rx_crc_errors —— 高 CRC 错误通常由电磁干扰、劣质线缆或端口接触不良引起
• rx_missed_errors —— 接收队列溢出,可能因中断处理不及时或 CPU 过载 - 在交换机侧同步检查对应端口的 CRC 错误、runts、giants 计数;若双方均升高,问题在物理链路;若仅主机侧升高,可能是驱动或 NIC 故障
- 结合 ping -f -c 1000 网关IP 观察丢包率,再用 ss -i 查看 TCP 连接的 retransmit、rcv_rtt、snd_cwnd 等字段,确认是否因底层丢包触发大量重传



















