在 Linux 中,“backlog” 常见于 网络 socket(listen backlog) 和 内核/应用队列 场景。下面重点说明最常见、最容易踩坑的 socket listen backlog 增大方法,并补充其他相关 backlog。
在代码中调用:
listen(sockfd, backlog);
例如:
listen(sockfd, 1024);
⚠️ 注意:
实际生效的 backlog 不是你写多少就用多少。
Linux 中实际 backlog 取:
min(应用 backlog, net.core.somaxconn)
cat /proc/sys/net/core/somaxconn
默认通常是:
sysctl -w net.core.somaxconn=4096
编辑:
/etc/sysctl.conf
添加:
net.core.somaxconn = 4096
生效:
sysctl -p
如果大量 SYN 过来,还需调整:
sysctl -w net.ipv4.tcp_max_syn_backlog=8192
永久:
net.ipv4.tcp_max_syn_backlog = 8192
sysctl -w net.ipv4.tcp_tw_reuse=1
(生产环境慎用 tcp_tw_recycle,已废弃)
ss -lnt
或:
netstat -lnt
示例:
LISTEN 0 4096 0.0.0.0:8080
第二个数字就是 当前 backlog
net.core.netdev_max_backlog
(网络接收软中断队列)
sysctl -w net.core.netdev_max_backlog=16384
Nginx:
listen 80 backlog=4096;
某些服务受 systemd 限制,可在 service 中:
[Service]
LimitNOFILE=100000
listen(..., 65535) 不生效somaxconn如果你能说明:
我可以给你更精确的参数组合。