在典型的C网络服务器实现中,可以使用listen设置接受暂挂队列的大小。当新连接收入并且队列中没有更多空间时,ECONNREFUSED将发送到客户端或忽略请求。
有没有办法知道这个队列的状态?这很重要,因为在高负载基于事件的守护进程中,我们正在检测来自客户端的一些重试,并且我们怀疑此队列已满并且忽略了连接尝试。
提前致谢。
答案 0 :(得分:8)
: 的/ proc / SYS /净/的IPv4 / tcp_max_syn_backlog:
记住的连接请求的最大数量,但仍未收到来自连接客户端的确认。
对于内存超过128Mb的系统,默认值为1024,对于内存较低的计算机,默认值为128。如果服务器出现过载,请尝试增加此数量。
的/ proc / SYS /净/型芯/ SOMAXCONN: socket listen()backlog的限制,在用户空间中称为SOMAXCONN。 默认为128.另请参阅tcp_max_syn_backlog以获取TCP套接字的其他调整。
这些是相关的sysctls ..在openbsd上,我现在坐着一个快速的sysctl -a显示:net.inet.ip.maxqueue = 300