【发布时间】:2013-08-09 22:59:08
【问题描述】:
尽管关于这个话题说了很多,但我仍然很难过。
我尝试了一个能够处理适当负载斜坡的巨型 linux 服务器,大概每秒有数千个连接。现在,如果我检查默认的 listen() 队列:
#cat /proc/sys/net/core/somaxconn
128
这根本不是实际的队列大小。我怀疑它可能是一个遗产,实际大小是这样给出的:
#cat /proc/sys/net/ipv4/tcp_max_syn_backlog
2048
但是,man tcp 表示后者是等待来自客户端的 ACK 的连接,这与尚未接受的连接总数不同,这就是 listen() backlog 的含义。
所以我的问题是如何增加 listen() backlog,以及如何获取/设置它的上限(在内核重新编译之前)?
【问题讨论】:
-
'这根本不可能是实际队列大小' - 为什么不呢?有界队列仅在推送速率始终大于弹出速率时才会溢出。