服务覆盖:昆明·曲靖·玉溪·保山·昭通·丽江·普洱·临沧·楚雄·红河·文山·西双版纳·大理·德宏·怒江·迪庆

查看所有网卡状态和统计信息

eycit 2026-04-20 -2 次阅读 系统安装
---

theme: default themeName: "默认主题" title: "网速慢成PPT?三行命令找出网卡丢包真凶,老旧服务器瞬间复活"


前言

业务系统响应慢,SSH连接卡成狗,运维排查了一圈发现CPU、内存、磁盘IO都正常——八成是网卡在搞鬼。丢包这事儿不像内存溢出那样显眼,它更像钝刀割肉,一点点把系统性能磨垮。今天就教你用三行命令把丢包真凶揪出来,文末附赠一个真实案例,看完你绝对会回来谢我。

丢包从哪来

Linux网络栈处理数据包大致经过:网卡驱动→内核网络协议栈→应用层。任何一环出问题都可能导致丢包,常见原因包括:

硬件层面:网线质量差、光模块衰减、交换机端口协商失败、网卡本身损坏 驱动层面:驱动版本过旧、与内核不兼容、MSI中断分配失败 系统层面:网卡缓冲区满、Ring Buffer设置过小、软中断CPU瓶颈 网络层面:广播风暴、ARP攻击、交换机端口安全

第一步:先看网卡状态

# 查看所有网卡状态和统计信息

ip -s link

或者

netstat -i

重点关注这几列:

  • RX-OK/RX-ERR:接收成功/错误包数
  • TX-OK/TX-ERR:发送成功/错误包数
  • RX-DRP:接收丢包数 ← 这个最关键
  • TX-DRP:发送丢包数

如果发现某张网卡的RX-DRP或TX-DRP数值持续增长,说明丢包就在这儿。

第二步:深入分析丢包原因

# 查看网卡详细信息,包括驱动、端口状态

ethtool eth0

查看网卡中断亲和性(判断是否绑核)

cat /proc/interruptsgrep eth0

查看网络队列统计

ss -s

ethtool输出重点

  • `Speed`: 协商速率是否达标(千兆网卡显示1000Mb/s)
  • `Duplex`: 全双工还是半双工
  • `Link detected`: 物理连接是否正常
  • `RX errors`: 接收错误细分(CRC错误、帧对齐错误、fifo overruns等)

一个典型的问题网卡输出:

Speed: 100Mb/sDuplex: Half

Link detected: yes RX errors: 0 RX dropped: 1234

注意Speed只有100Mb/s——这说明物理链路协商失败了,正常应该是1000Mb/s。问题大概率在网线或交换机端口。

第三步:定位到具体进程

有些丢包是因为系统本身处理不过来,特别是高并发场景:

# 查看各进程网络IO

nethogs

查看软中断CPU消耗

mpstat -I SUM 1

查看网络队列长度

cat /proc/net/softnet_stat

`softnet_stat`第三列表示每CPU队列溢出次数,如果数值持续增长,说明网络收包速度超过了内核处理能力,需要调优`net.core.netdev_max_backlog`。

实战案例:某游戏服务器TCP连接异常

去年处理过一个Case:玩家频繁掉线,SSH操作也卡顿。各项监控指标正常,唯独延迟异常偏高。

排查过程

1. `ip -s link` 发现eth0网卡的RX-DRP在持续增长 2. `ethtool eth0` 显示Speed协商为100Mb/s(应该是1000Mb/s) 3. 更换网线后,问题依旧

4. `dmesggrep eth0` 发现大量`eth0: link up`/`link down`日志

5. 最终定位是交换机端口老化,协商成功率低

解决方案:更换交换机端口后,协商速率恢复正常,丢包消失。

常用调优参数

确认是系统层面问题后,可以尝试调整这些参数:

# 增大网卡接收队列(应对高并发)

sysctl -w net.core.netdev_max_backlog=50000

增大Socket接收缓冲区

sysctl -w net.core.rmem_max=16777216 sysctl -w net.core.rmem_default=8388608

增大Socket发送缓冲区

sysctl -w net.core.wmem_max=16777216 sysctl -w net.core.wmem_default=8388608

启用TCP窗口缩放(提升大文件传输)

sysctl -w net.ipv4.tcp_window_scaling=1

永久生效写入/etc/sysctl.conf

echo "net.core.netdev_max_backlog=50000" >> /etc/sysctl.conf

硬件问题的预兆信号

如果排查一圈发现所有软件参数都正常,丢包依然存在,那就是硬件问题了。以下是常见硬件故障的典型特征:

现象可能原因
协商速率只有100Mb/s网线质量差/光模块衰减/交换机端口故障
频繁link down/up物理连接不稳定,可能是网线接头、光模块或交换机端口
RX CRC错误持续增长网线质量问题或电磁干扰
单向丢包严重可能是网卡发射端故障

预防胜于治疗

丢包问题往往在业务高峰期才暴露出来,提前预防很重要:

1. 监控:将网卡丢包数纳入Zabbix/Prometheus监控,超过阈值立即告警 2. 巡检:每周执行`ip -s link`,记录丢包数趋势 3. 日志:开启`ethtool -S eth0`详细统计,定期分析 4. 备件:关键服务器准备备用网卡,出问题可以快速热替换

结语

网卡丢包是典型的"隐形杀手",它不会让系统直接崩溃,但会让所有操作都慢半拍。好消息是Linux提供了完善的网络统计工具,只要掌握了正确的排查思路,三五分钟就能定位问题。遇到网络异常时,别忘了先跑一遍`ip -s link`——真凶往往就藏在那几行统计数字里。


看完还有什么疑问吗?

如果文章没有覆盖到你的情况,欢迎联系我们咨询——免费解答,说清楚再决定要不要服务。

📞 服务热线:13708730161 💬 微信:eyc1689 📧 邮箱:service@eycit.com 🌐 https://www.eycit.com

易云城IT服务,您身边的IT专家。

上一篇
实战版:硬盘分区方案推荐:C盘D盘怎么分才合理(2026...
下一篇
查看当前容器日志...