了解 GNU/Linux 中接受挂起连接队列的大小

发布于 2024-10-14 16:27:00 字数 280 浏览 2 评论 0原文

在典型的 C 网络服务器实现中,可以使用 listen。当新连接到来并且队列中没有更多空间时,ECONNREFUSED 会发送到客户端,否则请求将被忽略。

有什么方法可以知道这个队列的状态吗?这很重要,因为在基于事件的高负载守护进程中,我们检测到来自客户端的一些重试,并且我们怀疑该队列已满并且连接尝试被忽略。

提前致谢。

In a typical C network server implementation, the size of the accept pending queue can be set with listen. When a new connection incomes and there is no more space in the queue, ECONNREFUSED is send to the client or the request is ignored.

Is any way to know the state of this queue? It's important because in a high load event-based daemon, we're detecting some retries from the client, and we suspect that this queue goes full and the connection tries are being ignored.

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

高冷爸爸 2024-10-21 16:27:00

在Linux中:
/proc/sys/net/ipv4/tcp_max_syn_backlog:

记住的连接请求的最大数量,但仍未收到连接客户端的确认。

对于内存超过 128Mb 的系统,默认值为 1024;对于内存不足的机器,默认值为 128。如果服务器过载,请尝试增加此数字。

/proc/sys/net/core/somaxconn:
套接字listen()积压的限制,在用户空间中称为SOMAXCONN。
默认为 128。另请参阅 tcp_max_syn_backlog 以了解 TCP 套接字的其他调整。

这些是相关的 sysctls .. 在 openbsd 上,我现在坐一个快速 sysctl -a 显示:net.inet.ip.maxqueue=300

in linux:
/proc/sys/net/ipv4/tcp_max_syn_backlog:

Maximal number of remembered connection requests, which are still did not receive an acknowledgment from connecting client.

Default value is 1024 for systems with more than 128Mb of memory, and 128 for low memory machines. If server suffers of overload, try to increase this number.

/proc/sys/net/core/somaxconn:
Limit of socket listen() backlog, known in userspace as SOMAXCONN.
Defaults to 128. See also tcp_max_syn_backlog for additional tuning for TCP sockets.

these are the relevant sysctls .. on openbsd that i am sitting now a quick sysctl -a reveals: net.inet.ip.maxqueue=300

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文