如何調試 CentOS 奇怪的網路問題

如何調試 CentOS 奇怪的網路問題

我有一台 CentOS 7 機器,它不斷地將資料複製到 AWS/S3。
但是,它有一個問題,我將不勝感激有關如何調試的建議。

到 S3 的複製將持續數小時/數天,然後網路將停止運行(我有一項cron工作每分鐘記錄一次對網路的 ping 操作,以及 S3 命令aws s3 cp,所以我知道它發生的確切時間)。

在那個階段,NetworkManager守護程式看起來很好,syslog並且journalctl -xe沒有顯示任何異常,但使網路再次運行的唯一方法是重新啟動。

當網路停止正常運作時,該電腦上沒有任何使用者有任何計劃的 (crontab) 作業,該電腦具有靜態 IP,並且直到出現問題時,電腦和網路功能都沒有問題。

關於如何調試這個問題有什麼想法嗎?

編輯1:

根據 Artem Tashkinov 的建議,我為 crontab 添加了每分鐘一次的調用,該腳本執行以下操作:

#!/bin/bash -xv
ping -c1 1.1.1.1 >/dev/null 2>&1
if [ $? -eq 0 ];
then
        echo Successful
else
        echo Fail
        systemctl stop NetworkManager
        rmmod r8169
        modprobe r8169
        systemctl start NetworkManager
fi

我會看看它是否能夠在網路崩潰時恢復網路。

編輯2:

即使有了腳本,網路故障時也沒有恢復。

不過,我增強了腳本,因為我添加了外部網路卡,看看它是否能解決問題。

#!/bin/bash -xv
#
#kernel_module="r8169"  # on-board NIC
#kernel_module="e1000e" # add-on NIC

nic=$( ifconfig | grep -B1 10.60.100 | head -1 | awk -F: '{ print $1 }' )
kernel_module=$( ethtool -i $nic | grep driver | awk '{ print $NF }' )

ping -c1 1.1.1.1 >/dev/null 2>&1
if [ $? -eq 0 ];
#if [ $? -ne 0 ];
then
        echo Successful
else
        echo Fail
        systemctl stop NetworkManager
        rmmod $kernel_module
        modprobe $kernel_module
        systemctl start NetworkManager
fi

答案1

但使網路再次正常工作的唯一方法是重新啟動

我以前也有過這樣的伺服器。

我所做的就是在 crontab 中新增一個任務來 ping 一個已知的 IP 位址。如果無法訪問,則關閉網絡,刪除負責 NIC 的核心模組 ( rmmod module_name) 並再次插入 ( modprobe module_name),最後再次啟動網絡。請嘗試一下。

如果它對你有用,你絕對應該報告錯誤

相關內容