connect: No buffer space available


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM