1

当我在非常大规模(2048 台机器)上测试自制的分布式键值存储时遇到此错误,它在 1024 台机器上运行良好。通信模式是 n:n,这意味着每台机器都会向其他机器发送大量请求。我使用 C TCP socket 来实现它, SO_REUSEADDR 来回收那些套接字。谁能给我一些关于可能导致此错误的可能性的提示?代码很复杂,很难在不丢失必要逻辑的情况下简化并在此处发布。所以我只想知道开始调试的所有可能原因。

顺便说一句,我将设置更改为: echo 8000 > /proc/sys/kernel/threads-max

echo 8000 > /proc/sys/net/core/somaxconn #监听队列的限制,默认为128

回声 8000 > /proc/sys/net/core/netdev_max_backlog

回声 10 > /proc/sys/net/ipv4/tcp_fin_timeout

回声“10000 65000”> /proc/sys/net/ipv4/ip_local_port_range

我这样做只是为了启用最大连接数。

谢谢,-托尼

4

1 回答 1

2

我遇到了与您的“没有可用的缓冲区空间”错误相同的问题。你做的那个回声补丁被认为是临时设置。

使用 echo 更改临时设置后(如上所述),您将需要重新启动网络,这将清除“没有可用的缓冲区空间”错误。

您需要通过在 /etc/sysctl.conf 文件末尾添加以下行来添加永久设置:

somaxconn = 8000

见这里: http ://www.cyberciti.biz/files/linux-kernel/Documentation/networking/ip-sysctl.txt

希望能帮助到你。

罗伯特

http://NetworkCities.com

于 2012-04-19T19:11:23.887 回答