1 问题:ping或者telnet设备显示故障
[root@localhost ~]# ping 192.168.163.89
connect: No buffer space available
2 原因:
ARP缓存过小导致的。
内核维护的arp表过于庞大, 发生抖动, 因此导致了这种情况
几个内核ARP参数:
=================================gc_stale_time决定检查一次相邻层记录的有效性的周期。当相邻层记录失效时,将在给它发送数据前,再解析一次。缺省值是60秒。gc_thresh1存在于ARP高速缓存中的最少层数,如果少于这个数,垃圾收集器将不会运行。缺省值是128。gc_thresh2保存在 ARP 高速缓存中的最多的记录软限制。垃圾收集器在开始收集前,允许记录数超过这个数字 5 秒。缺省值是 512。gc_thresh3保存在 ARP 高速缓存中的最多记录的硬限制,一旦高速缓存中的数目高于此,垃圾收集器将马上运行。缺省值是1024。base_reachable_time
设置arp缓存的老化时间,默认是30s
=================================
比如arp -an|wc -l的结果是300左右, 那么应当调高gc_thresh各项数值,防止抖动的发生:我的值是692,当然要调整了!!
命令如下:
echo "512" > /proc/sys/net/ipv4/neigh/default/gc_thresh1
echo "2048" > /proc/sys/net/ipv4/neigh/default/gc_thresh2echo "4096" > /proc/sys/net/ipv4/neigh/default/gc_thresh3echo "60" > /proc/sys/net/ipv4/neigh/eth0/base_reachable_time
echo "120" > /proc/sys/net/ipv4/neigh/default/gc_stale_time
也可以写入内核配置文件中
# vim /etc/sysctl.conf
在sysctl.conf最后面写入下面三行,如下
net.ipv4.neigh.default.gc_thresh1 = 512
net.ipv4.neigh.default.gc_thresh2 = 2048
net.ipv4.neigh.default.gc_thresh3 = 4096
net.ipv4.neigh.eth0.base_reachable_time = 60
net.ipv4.neigh.default.gc_stale_time = 120
下面这句的作用是:当有个多个网卡,每个网卡在不同的网段,那么可以过滤掉非本网卡ARP请求的回应;但是如果多个网卡的ip在一个网段,那么就不行了。
net.ipv4.conf.all.arp_filter = 1