尽管关于这个话题说了很多,但我仍然很难过。
我尝试了一个能够处理适当负载斜坡的怪物 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以及如何获取/设置它的上限(在内核重新编译之前)?