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_thresh2
echo "4096" > /proc/sys/net/ipv4/neigh/default/gc_thresh3
echo "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