我有一台 CentOS 7 机器,它不断地将数据复制到 AWS/S3。
但是,它有一个问题,我将不胜感激有关如何调试的建议。
复制到 S3 将持续数小时/数天,然后网络将停止运行(我有一项cron
工作每分钟记录一次对网络的 ping 以及 S3 命令aws s3 cp
,所以我知道它发生的确切时间)。
在那个阶段,NetworkManager
守护进程看起来很好,syslog
并且journalctl -xe
没有显示任何异常,但使网络再次运行的唯一方法是重新启动。
该机器上没有用户在网络停止正常运行、机器具有静态 IP 以及直到出现问题的那一刻、机器和网络功能没有问题的时间段内有任何计划的 (crontab) 作业。
关于如何调试此问题的任何想法?
编辑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:
即使使用脚本,网络在失败时也没有恢复。
不过,我增强了脚本,因为我添加了一个外部 NIC,看看它是否能解决问题。
#!/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
我以前有过这样的服务器。
我所做的是在 crontab 中添加一个任务来 ping 一个已知的 IP 地址。如果无法访问,则网络被关闭,负责 NIC 的内核模块被移除(
rmmod module_name
)并再次插入(modprobe module_name
),最后网络再次启动。请尝试一下。如果它对你有用,你肯定应该报告一个错误。