TCP连接错误“没有可用的缓冲区空间”
问题描述:
我在测试超大规模(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
我这样做只是为了启用最大连接数。
感谢, 托尼
答
我有同样的问题,因为你的“无缓冲区空间可用”的错误。你做的回声补丁被认为是临时设置。
使用echo(如上所述)更改临时设置后,需要重新启动网络,清除“无可用缓冲区空间”错误。
您将需要通过增加线在/etc/sysctl.conf文件的末尾添加永久设置:
SOMAXCONN = 8000
在这里看到: http://www.cyberciti.biz/files/linux-kernel/Documentation/networking/ip-sysctl.txt
希望它帮助。
罗伯特
打开了太多的描述可能会导致这个错误,也MTU错误配置和其他一些条件,我想。不可能确保没有显示问题的最小代码示例。 – 2012-04-15 08:13:53
这个错误并不是我之前遇到过的“太多打开的文件描述符”。我也有这些设置: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