“NETDEV WATCHDOG: transmit queue timed out” 导致网卡卡死的修复流程

NETDEV WATCHDOG超时直接卡死网卡是内核主动保护机制,因驱动层TX描述符耗尽、DMA失败或硬件卡死导致发送停滞,需重载驱动或升级固件修复。

/

为什么 NETDEV WATCHDOG 超时会直接卡死网卡

这不是单纯的告警,而是内核在检测到网卡驱动长时间未完成数据包发送(默认 5 秒)后,主动触发的保护性停用。一旦触发,对应队列会被禁用,tx_queue_len 归零,ifconfigip link 里能看到 NO-CARRIER 或持续 LOWER_UP 但无流量,dmesg 里反复刷出该错误——说明驱动已放弃恢复,必须人工干预。

  • 根本原因几乎都落在驱动层:TX 描述符耗尽、DMA 映射失败、硬件状态机卡在 BUSY、中断未及时响应
  • 不是网络拥塞或丢包问题,pingtcpdump 在本地可能完全正常,但出向流量彻底停滞
  • 重启网络服务(systemctl restart networking)无效,必须重载驱动或重启内核模块

快速定位是哪个网卡和驱动在出问题

先确认报错绑定的具体设备:dmesg -T | grep -i "watchdog.*timed out",输出类似 NETDEV WATCHDOG: eth0 (tg3): transmit queue 0 timed out,重点看括号里的驱动名(这里是 tg3)和接口名(eth0)。

  • 查驱动归属:ethtool -i eth0 | grep driver,验证是否与 dmesg 一致
  • 查当前驱动状态:lsmod | grep tg3(替换成你实际的驱动名),确认是否已加载
  • 查硬件是否异常:lspci -vv -s $(ethtool -i eth0 | awk '/bus-info/ {print $3}') | grep -A10 "Kernel driver",观察是否有 Interrupt 字段缺失或 MSI-X 状态异常

临时恢复:卸载并重载驱动(不重启系统)

这是最快让网卡“活过来”的方式,但仅治标。执行前确保你有带外管理(如 iDRAC/iLO)或本地终端访问,避免 SSH 断连后失联。

  • 关闭接口:ip link set eth0 down
  • 卸载驱动:rmmod tg3(替换成你的驱动名,如 e1000eixgbe
  • 重新加载:modprobe tg3
  • 启用接口:ip link set eth0 up
  • 验证:ethtool eth0 | grep "Link detected" 应为 yes,且 cat /proc/interrupts | grep eth0 有中断计数增长

注意:某些驱动(如 mlx5_core)依赖多个模块,需按依赖顺序卸载;若报 Module tg3 is in use,用 lsof -nPi | grep eth0 找占用进程,或加 -f 强制(不推荐)。

Sologo AI

Sologo AI

SologoAI 是一款AI在线LOGO生成工具,帮助用户快速创建独特且专业的品牌标识和配套VI设计。

下载

永久修复要盯紧三个配置点

临时重载只是绕过问题,真正稳定需从硬件兼容性、驱动参数、队列调度三方面收敛。

  • 升级固件:尤其是 Broadcom(tg3)、Intel(e1000e)网卡,老版本 NIC 固件在高吞吐下易卡 TX 状态机,去厂商官网下最新 .bin 文件 + bnx2-firmwareintel-microcode 包更新
  • 调驱动参数:在 /etc/modprobe.d/ 下新建文件(如 net-fix.conf),添加:
    options tg3 disable_msi=1
    options tg3 enable_mcp=0

    disable_msi 对老主板更稳,enable_mcp 关闭某些 BCM 芯片的电源管理副作用)

  • 压测验证:用 iperf3 -c X.X.X.X -t 300 -P 4 持续 5 分钟,同时 watch -n1 'cat /sys/class/net/eth0/queues/tx-0/byte_count' 观察是否突变为 0 —— 这才是真实复现点

很多团队卡在“重载完好了几天又复发”,往往是因为只改了驱动参数却没升固件,或者误把 net.core.netdev_watchdog_timeo 调大(掩盖问题,不解决)。真正稳定的系统,dmesg 里不该出现这行错误。

https://www.php.cn/faq/2027345.html

发表回复

Your email address will not be published. Required fields are marked *