结合你 ip -s link show 的输出,我们来具体看看这两个高得吓人的指标到底意味着什么:
errors (RX errors):这个字段通常是物理层问题的汇总。光链路质量差(比如光衰过大)、光模块故障、线缆损坏或接头接触不良,都会导致接收到的数据包损坏,从而被标记为错误。
overruns (RX overruns):这直接指向服务器性能瓶颈。它表明网卡的硬件缓冲区(Ring Buffer)已经塞满了,但操作系统的驱动程序没能及时取走这些数据,导致新来的数据包直接被网卡硬件丢弃。
综合以上信息,p3p1 口的故障根本原因极有可能是:服务器CPU或PCIe总线性能不足,导致无法及时处理p3p1口的中断请求,进而引发了大量的 overruns 和 errors。
“对调光纤”试验的铁证:这个现象非常关键。故障始终跟随 p3p1 这个端口,而不是跟随光纤链路。这完美地排除了光模块、光纤、对端交换机接口等外部物理链路的问题,将故障点锁定在服务器内部的 p3p1 端口或其关联的系统资源(如PCIe通道、CPU中断处理能力)上。
errors 与 overruns 的关系:当一个网口因为处理不过来而 overrun 时,接收数据的行为就可能变得不稳定。一个部分接收的数据包,在物理层看来就和损坏的数据包一样,从而也会被记录为 errors。所以,二者数量几乎一致,恰恰印证了性能瓶颈才是元凶。
你应该将排查重点完全转移到服务器内部,因为问题几乎可以确定就在p3p1端口自身。
检查系统资源:
内存配置:核实服务器的内存是否按官方推荐配置(如每个CPU至少配置4条内存,确保每个NUMA节点都有内存资源),内存配置不足可能会引发此类问题。
CPU中断处理:检查 p3p1 口的中断是否集中在某个或某几个CPU核心上,CPU的si(软中断)使用率是否过高。
检查PCIe配置:
链路速度:确认 p3p1 所在的PCIe插槽是否工作在正确的速度(如PCIe 3.0/4.0 x8)上,是否存在降速的情况。
尝试更换PCIe插槽:如果服务器有空闲的PCIe插槽,可以尝试将p3p1对应的网卡插到另一个PCIe插槽上。这有助于排查当前插槽是否存在物理故障或资源冲突。
更新固件/驱动:检查并更新服务器的BIOS、BMC固件,以及网卡的最新驱动程序。
在排查核心方向的同时,可以验证一些软件层面的可能性。
检查Bonding模式:确认当前 bond1 和 bond2 的工作模式(cat /proc/net/bonding/bond1)。balance-xor 或 802.3ad 这类需要交换机配合的模式,如果配置不当也会导致问题。你可以尝试临时将bond模式改为 active-backup,并设置 p16p1 为主网卡,看 p3p1 作为备用时 errors 和 overruns 是否还增长。
临时测试:在不影响业务的前提下,可以考虑将 p3p1 从 bond1 中移除,给它单独配置一个IP进行测试。如果问题依旧,则更说明是网卡本身或服务器资源的问题;如果问题消失,则可能与Bonding配置有关。
# 1. 看接口丢包、错包
ip -s link show p3p1
ip -s link show p3p2
ip -s link show bond0
# 2. 看驱动、固件、速率双工
ethtool p3p1
ethtool -i p3p1 # driver、version、firmware-version
# 3. 看网卡硬件统计(rx_errors / rx_dropped / rx_fifo_errors / rx_missed_errors)
ethtool -S p3p1 | grep -iE 'error|drop|fifo|missed'
ethtool -S p3p2 | grep -iE 'error|drop|fifo|missed'
# 4. 看 Bond 模式与状态
cat /proc/net/bonding/bond0
# 5. 看系统日志(网卡异常、PCIe错误)
dmesg -T | grep -iE 'p3p1|eth|nic|bnx2|ixgbe|mlx|firmware|pcie|error'
journalctl -k | grep -iE 'p3p1|error|pcie'
# 6. 看中断、CPU 软中断(是否 CPU 处理不过来)
cat /proc/interrupts | grep -E 'p3p1|p3p2'
top -H
rx_fifo_errors / rx_no_buffer_count)# 查看当前队列
ethtool -g p3p1
# 放大 RX/TX 队列(临时)
ethtool -G p3p1 rx 4096 tx 4096
ethtool -G p3p2 rx 4096 tx 4096
rx_dropped / rx_fifo_errors 是否不再增长。top -H 看到 ksoftirqd/xx CPU 100%cat /proc/softirqs NET_RX 暴增# 1. 开启 irqbalance
systemctl enable --now irqbalance
# 2. 检查网卡多队列是否开启
ethtool -l p3p1
# 3. 开启 RSS 哈希(流量打散到多队列)
ethtool -X p3p1 hfunc toeplitz
cat /proc/net/bonding/bond0
ifenslave -c bond0 p16p1ip link show p3p1
# 两端 MTU 必须一致(通常 1500 或 9000)
# 看网卡 MAC、槽位、名称对应
lspci | grep -i eth
dmidecode -t slot
/etc/udev/rules.d/ 里的网卡命名规则,重启重命名。
暂无评论
暂无评论
亲~登录后才可以操作哦!
确定你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作
举报
×
侵犯我的权益
×
侵犯了我企业的权益
×
抄袭了我的内容
×
原文链接或出处
诽谤我
×
对根叔社区有害的内容
×
不规范转载
×
举报说明
暂无评论