neighbour table overflow 问题解决

故障原因:

直接上图:

这是命令行终端的报错信息,原因是服务器无法连接上,连PING都不行。

怀疑是ARP表过大的原因:

通过arp -a  哎,我的天,有2022条ARP记录

回想一下,有可能是CACTI的discovery插件配置的子网掩码太大了[192.168.0.0/16],造成ARP表过大的原因

解决方法:

先清空所有的ARP表:

所有在Linux系统下 arp -d $ip 命令只能清除一个IP地址的对应MAC地址缓存,可以使用组合命令操作。
组合命令清楚所有arp缓存:


 arp -n|awk '/^[1-9]/{system("arp -d "$1)}'  


以上命令必须 root 才可以执行。


使用ip命令清除某一网络接口的arp(下面命令是 eth0 接口)

 ip neigh flush  dev eth0  


Linux 清除arp缓存是把列表标记为(incomplete),在下一次系统清理垃圾是会清除。

再调整内核ARP参数:

内核维护的arp表过于庞大, 发生抖动, 因此导致了这种情况,几个内核ARP参数:
=================================
gc_stale_time
决定检查一次相邻层记录的有效性的周期。当相邻层记录失效时,将在给它发送数据前,再解析一次。缺省值是60秒。
gc_thresh1
存在于ARP高速缓存中的最少层数,如果少于这个数,垃圾收集器将不会运行。缺省值是128。
gc_thresh2
保存在 ARP 高速缓存中的最多的记录软限制。垃圾收集器在开始收集前,允许记录数超过这个数字 5 秒。缺省值是 512。
gc_thresh3
保存在 ARP 高速缓存中的最多记录的硬限制,一旦高速缓存中的数目高于此,垃圾收集器将马上运行。缺省值是1024。
=================================
比如arp -an|wc -l的结果是300左右, 那么应当调高gc_thresh各项数值,防止抖动的发生:
echo "net.ipv4.neigh.default.gc_thresh1 = 512" >> sysctl.conf
echo "net.ipv4.neigh.default.gc_thresh2 = 2048" >> sysctl.conf
echo "net.ipv4.neigh.default.gc_thresh3 = 4096" >> sysctl.conf

清完之后通过缩小子网掩码来处理:




分割线
感谢打赏
江西数库信息技术有限公司
YWSOS.COM 平台代运维解决方案
 评论
 发表评论
姓   名:

Powered by AKCMS