2012-04-15 141 views
1

我在測試超大規模(2048臺機器)上的自制分佈式鍵值存儲時遇到此錯誤,它在1024臺計算機上正常工作。通信模式是n:n,這意味着每臺機器都會向其他人發送大量請求。 我使用C TCP套接字來實現它,SO_REUSEADDR來回收這些套接字。 任何人都可以給我一些關於可能導致這個錯誤的提示嗎?代碼很複雜,很難簡化它並在這裏發佈而不會丟失必要的邏輯。所以我只想知道所有可能的原因開始調試。TCP連接錯誤「沒有可用的緩衝區空間」

BTW我改變設置: 呼應8000>的/ proc/sys目錄/內核/線程-MAX

呼應聽隊列8000>的/ proc/SYS /網/核心/ SOMAXCONN #limit,默認爲128

回聲8000>的/ proc/SYS /淨/型芯/ netdev_max_backlog

回聲10>的/ proc/SYS /淨/的IPv4/tcp_fin_timeout

回聲 「10000 65000」>/PROC/SYS /淨/ ipv4/ip_local_port_range

我這樣做只是爲了啓用最大連接數。

感謝, 託尼

+0

打開了太多的描述可能會導致這個錯誤,也MTU錯誤配置和其他一些條件,我想。不可能確保沒有顯示問題的最小代碼示例。 – 2012-04-15 08:13:53

+0

這個錯誤並不是我之前遇到過的「太多打開的文件描述符」。我也有這些設置:echo 8000>/proc/sys/kernel/threads-max ;; echo 8000>/proc/sys/net/core/somaxconn ;; echo 8000>/proc/sys/net/core/netdev_max_backlog ;; echo 10>/proc/sys/net/ipv4/tcp_fin_timeout ;; echo「10000 65000」>/proc/sys/net/ipv4/ip_local_port_range – Tony 2012-04-15 08:19:16

回答

2

我有同樣的問題,因爲你的「無緩衝區空間可用」的錯誤。你做的回聲補丁被認爲是臨時設置。

使用echo(如上所述)更改臨時設置後,需要重新啓動網絡,清除「無可用緩衝區空間」錯誤。

您將需要通過增加線在/etc/sysctl.conf文件的末尾添加永久設置:

SOMAXCONN = 8000

在這裏看到: http://www.cyberciti.biz/files/linux-kernel/Documentation/networking/ip-sysctl.txt

希望它幫助。

羅伯特

http://NetworkCities.com

相關問題