TCP连接错误“没有可用的缓冲区空间”

时间:2012-04-15 08:08:51

标签: c sockets tcp connection

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

BTW我将设置更改为: echo 8000>的/ proc / SYS /内核/线程-MAX

echo 8000>侦听队列的/ proc / sys / net / core / somaxconn #limit,默认为128

echo 8000>的/ proc / SYS /净/型芯/ netdev_max_backlog

echo 10>的/ proc / SYS /净/的IPv4 / tcp_fin_timeout

echo“10000 65000”>的/ proc / SYS /净/的IPv4 / ip_local_port_range

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

谢谢, 托尼

1 个答案:

答案 0 :(得分:2)

我遇到了与“无可用缓冲区空间”错误相同的问题。您执行的回音补丁被视为临时设置。

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

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

somaxconn = 8000

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

希望它有所帮助。

罗伯特

http://NetworkCities.com