如何调试 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),最后再次启动网络。请尝试一下。

如果它对你有用,你绝对应该报告错误

相关内容