【发布时间】:2012-04-26 23:27:31
【问题描述】:
我在大规模(2048 台机器)测试自制分布式键值存储时遇到此错误,它在 1024 台机器上运行良好。通信模式是 n:n,这意味着每台机器都会向其他机器发送大量请求。 我使用 C TCP socket 来实现它, SO_REUSEADDR 来回收那些套接字。 谁能给我一些关于可能导致此错误的可能性的提示?代码很复杂,很难在不丢失必要逻辑的情况下简化并在此处发布。所以我只想知道开始调试的所有可能原因。
顺便说一句,我将设置更改为: echo 8000 > /proc/sys/kernel/threads-max
echo 8000 > /proc/sys/net/core/somaxconn #监听队列的限制,默认为128
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
我这样做只是为了启用最大连接数。
谢谢, -托尼
【问题讨论】:
-
打开的描述符太多可能会导致此错误,还有 MTU 错误配置和许多其他情况,我想。如果没有一些显示问题的最小代码示例,就无法确定。
-
错误不是我之前遇到的“打开的文件描述符太多”。我也有这些设置: echo 8000 > /proc/sys/kernel/threads-max;;回声 8000 > /proc/sys/net/core/somaxconn;;回声 8000 > /proc/sys/net/core/netdev_max_backlog;;回声 10 > /proc/sys/net/ipv4/tcp_fin_timeout;; echo "10000 65000" > /proc/sys/net/ipv4/ip_local_port_range
标签: c sockets tcp connection