Linux
有沒有辦法從“Detected Tx Unit Hang”網路錯誤中恢復?
從掛起喚醒後,我的 Ubuntu 21.04 系統出現了網路問題。我猜大約 50% 的 IP 套接字失敗了。這包括
ssh
和的失敗ping
。“失敗”是指連接嘗試阻塞,然後最終超時。(旁白:也許ping
不使用套接字?)我相信所有嘗試網路訪問的程序都遇到了相同的失敗率。幾個星期以來,我每晚都在暫停系統。今天是我複工後第一次遇到問題。
我重新啟動了系統,這似乎已經解決了問題(至少在它再次發生之前)。
重新啟動後,我在
syslog
.我在每次掛起時看到以下兩行:
Sep 4 09:00:18 hostname kernel: [896165.908582] igc 0000:b0:00.0: no suspend buffer for PTM Sep 4 09:00:18 hostname kernel: [896165.908589] igc 0000:af:00.0: no suspend buffer for PTM
(旁白:雖然上述行指的是掛起之前發生的事件,但我相信日誌條目是在系統恢復後才創建的。因此,這些事件實際上發生在指定時間之前的幾個小時。)
每份簡歷上都有兩條相同的行:
Sep 4 09:00:18 hostname kernel: [896166.257107] igc 0000:af:00.0: no suspend buffer for PTM Sep 4 09:00:18 hostname kernel: [896166.257177] igc 0000:b0:00.0: no suspend buffer for PTM
(旁白:可能是因為系統有兩個內置網卡,所以有兩條線?)
以下是僅在我最近的簡歷中出現的日誌條目,也就是網路問題開始的時候:
Sep 4 09:00:19 hostname kernel: [896168.214463] igc 0000:b0:00.0 enp176s0: Register Dump Sep 4 09:00:19 hostname kernel: [896168.214467] igc 0000:b0:00.0 enp176s0: Register Name Value Sep 4 09:00:19 hostname kernel: [896168.214478] igc 0000:b0:00.0 enp176s0: CTRL 081c0641 Sep 4 09:00:19 hostname kernel: [896168.214481] igc 0000:b0:00.0 enp176s0: STATUS 40380401 Sep 4 09:00:19 hostname kernel: [896168.214483] igc 0000:b0:00.0 enp176s0: CTRL_EXT 10000040 Sep 4 09:00:19 hostname kernel: [896168.214486] igc 0000:b0:00.0 enp176s0: MDIC 18017949 Sep 4 09:00:19 hostname kernel: [896168.214488] igc 0000:b0:00.0 enp176s0: ICR 00000001 Sep 4 09:00:19 hostname kernel: [896168.214490] igc 0000:b0:00.0 enp176s0: RCTL 04408022 Sep 4 09:00:19 hostname kernel: [896168.214497] igc 0000:b0:00.0 enp176s0: RDLEN[0-3] 00001000 00001000 00001000 00001000 Sep 4 09:00:19 hostname kernel: [896168.214504] igc 0000:b0:00.0 enp176s0: RDH[0-3] 00000000 00000000 00000000 00000000 Sep 4 09:00:19 hostname kernel: [896168.214511] igc 0000:b0:00.0 enp176s0: RDT[0-3] 000000ff 000000ff 000000ff 000000ff Sep 4 09:00:19 hostname kernel: [896168.214518] igc 0000:b0:00.0 enp176s0: RXDCTL[0-3] 02040808 02040808 02040808 02040808 Sep 4 09:00:19 hostname kernel: [896168.214525] igc 0000:b0:00.0 enp176s0: RDBAL[0-3] 2e35d000 51576000 337b2000 29a5b000 Sep 4 09:00:19 hostname kernel: [896168.214532] igc 0000:b0:00.0 enp176s0: RDBAH[0-3] 00000001 00000001 00000002 00000001 Sep 4 09:00:19 hostname kernel: [896168.214534] igc 0000:b0:00.0 enp176s0: TCTL a50400fa Sep 4 09:00:19 hostname kernel: [896168.214541] igc 0000:b0:00.0 enp176s0: TDBAL[0-3] 2e35d000 51576000 337b2000 29a5b000 Sep 4 09:00:19 hostname kernel: [896168.214548] igc 0000:b0:00.0 enp176s0: TDBAH[0-3] 00000001 00000002 00000001 00000001 Sep 4 09:00:19 hostname kernel: [896168.214555] igc 0000:b0:00.0 enp176s0: TDLEN[0-3] 00001000 00001000 00001000 00001000 Sep 4 09:00:19 hostname kernel: [896168.214562] igc 0000:b0:00.0 enp176s0: TDH[0-3] 00000007 00000009 00000004 00000000 Sep 4 09:00:19 hostname kernel: [896168.214568] igc 0000:b0:00.0 enp176s0: TDT[0-3] 0000000d 00000011 00000004 00000001 Sep 4 09:00:19 hostname kernel: [896168.214575] igc 0000:b0:00.0 enp176s0: TXDCTL[0-3] 02100108 02100108 02100108 02100108 Sep 4 09:00:19 hostname kernel: [896168.214576] igc 0000:b0:00.0 enp176s0: Reset adapter
然後有很多(超過 19,000 個)條目,如下所示:
Sep 4 09:01:22 hostname kernel: [896231.189109] igc 0000:b0:00.0 enp176s0: Detected Tx Unit Hang Sep 4 09:01:22 hostname kernel: [896231.189109] Tx Queue <1> Sep 4 09:01:22 hostname kernel: [896231.189109] TDH <9> Sep 4 09:01:22 hostname kernel: [896231.189109] TDT <9> Sep 4 09:01:22 hostname kernel: [896231.189109] next_to_use <9> Sep 4 09:01:22 hostname kernel: [896231.189109] next_to_clean <9> Sep 4 09:01:22 hostname kernel: [896231.189109] buffer_info[next_to_clean] Sep 4 09:01:22 hostname kernel: [896231.189109] time_stamp <10d596f4c> Sep 4 09:01:22 hostname kernel: [896231.189109] next_to_watch <000000002b25478e> Sep 4 09:01:22 hostname kernel: [896231.189109] jiffies <10d59ad90> Sep 4 09:01:22 hostname kernel: [896231.189109] desc.status <0>
我的問題是,除了完全重新啟動系統之外,還有什麼方法可以從命令行手動重置/重新啟動網路介面?
該系統是一個桌面工作站,所以我可以使用鍵盤。
重新啟動後,我意識到也許我應該嘗試重新掛起並重新喚醒系統。但我只是在完全重啟後才想到這一點。
我從睡眠中醒來後再次遇到網路錯誤。這一次,我沒有重新啟動,而是嘗試了以下(相當明顯)的解決方案:
sudo ifconfig enp176s0 down sudo systemctl stop systemd-networkd sudo systemctl start systemd-networkd
我的網路又開始工作了!
如果遇到問題:
替換
enp176s0
為您的網路介面的名稱。您的網路管理員可能不是
systemd-networkd
.如果您使用圖形桌面環境,那麼您可以通過桌面工具欄上的菜單簡單地禁用然後重新啟用網路,而不是上述環境。