在 Linux 里,backlog 不是一个“全局参数”,而是跟具体场景绑定的,常见有下面几种情况:
listen() 的 backlog)这是最常见的 backlog。
由应用程序代码决定,不是系统文件直接改的:
listen(sockfd, backlog);
例如:
listen 80 backlog=1024;tcp-backlog 511listen() 时传参实际生效值是:
min(应用设置的 backlog, /proc/sys/net/core/somaxconn)
somaxconn控制所有监听 socket 的最大 accept 队列长度
cat /proc/sys/net/core/somaxconn
sysctl -w net.core.somaxconn=4096
# /etc/sysctl.conf
net.core.somaxconn = 4096
然后:
sysctl -p
对应 SYN_RECV 状态
net.ipv4.tcp_max_syn_backlog
cat /proc/sys/net/ipv4/tcp_max_syn_backlog
sysctl -w net.ipv4.tcp_max_syn_backlog=8192
| 类型 | 在哪设 |
|---|---|
| 应用 backlog | 程序代码 / 服务配置 |
| 全连接队列上限 | net.core.somaxconn |
| 半连接队列 | net.ipv4.tcp_max_syn_backlog |
如果你说的是某个具体服务(Nginx / Redis / 自己程序),告诉我,我可以直接给你配置示例。