当我在非常大规模(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
我这样做只是为了启用最大连接数。
谢谢, 托尼
答案 0 :(得分:2)
我遇到了与“无可用缓冲区空间”错误相同的问题。您执行的回音补丁被视为临时设置。
使用echo更改临时设置后(如上所述),您需要重新启动网络,清除“无可用缓冲区空间”错误。
您需要通过添加/etc/sysctl.conf文件末尾的行来添加永久设置:
somaxconn = 8000
见这里: http://www.cyberciti.biz/files/linux-kernel/Documentation/networking/ip-sysctl.txt
希望它有所帮助。
罗伯特