生產環境 Linux 伺服器突發公網斷線,內網仍通。dmesg 顯示 NETDEV WATCHDOG: eth0: transmit timed out。重啟網路服務暫時恢復,但問題週期性復發。經排查為 ACPI 電源管理與 APIC 中斷控制器與網卡驅動不相容,透過 GRUB 核心啟動參數 acpi=off noapic 徹底根治。本文完整記錄排查思路與解決方案。
dmesg 關鍵錯誤:NETDEV WATCHDOG: eth0: transmit timed out/etc/init.d/network restart 或 systemctl restart network 可暫時恢復,但數小時至數天後復發。ethtool -i eth0)、固件版本,確認已為最新。kernel-firmware、調整 tx_queue_len、關閉 TSO/GSO/LRO (ethtool -K eth0 tso off gso off lro off),均未根治。根因:ACPI 電源管理嘗試將網卡置入低功耗狀態(D3),或 APIC 中斷路由錯誤導致網卡中斷遺失,驅動未在 watchdog 逾時前完成傳輸,觸發 NETDEV WATCHDOG 重置網卡,造成短暫斷線。
解決方案:在 GRUB 核心啟動參數加入 acpi=off noapic。
/boot/grub/grub.conf(或 /boot/grub/menu.lst、/etc/default/grub 視發行版)。kernel / linux16 / linux 行,末尾追加:acpi=off noapic/etc/default/grub):GRUB_CMDLINE_LINUX="acpi=off noapic"grub2-mkconfig -o /boot/grub2/grub.cfg。| 參數 | 作用 | 副作用 |
|---|---|---|
acpi=off | 禁用 ACPI 進階電源管理(休眠、CPU 降頻、裝置電源狀態控制) | 無法使用睡眠/休眠、CPU 降頻、電池狀態偵測(伺服器通常不需) |
noapic | 禁用 IO-APIC,改用傳統 PIC 中斷控制器 | 中斷處理效率略降、無法支援超過 15 條 IRQ(現代伺服器通常有 IO-APIC,但若驅動相容則可開啟) |
NETDEV WATCHDOG 錯誤,公網連線穩定。dmesg | grep -i watchdog 無輸出。cpufreq-info 顯示 performance governor),功耗略增但在可接受範圍。pcie_aspm=off:僅關閉 PCIe 主動狀態電源管理,保留 CPU 降頻。intel_idle.max_cstate=1:限制 CPU 進入深度閒置狀態。核心啟動參數是排查硬體相容性問題的利器。遇到週期性網卡 watchdog timeout,優先嘗試 acpi=off noapic,往往能以最小代價換取長期穩定。