在 Linux 中,“backlog” 常见于 TCP 监听队列(listen backlog) 和 syn backlog(半连接队列)。下面分别说明如何增大。
在代码中调用:
listen(sockfd, backlog);
backlog 是上限建议值,实际值受内核限制。
例如在 Nginx 中:
listen 80 backlog=1024;
# 查看
cat /proc/sys/net/core/somaxconn
# 临时修改
sysctl -w net.core.somaxconn=4096
# 永久修改
echo "net.core.somaxconn=4096" >> /etc/sysctl.conf
sysctl -p
listen backlog 实际值 =
min(应用 backlog, somaxconn)
# 查看
cat /proc/sys/net/ipv4/tcp_max_syn_backlog
# 修改
sysctl -w net.ipv4.tcp_max_syn_backlog=8192
sysctl -w net.ipv4.tcp_syncookies=1
开启后,SYN 队列满时会使用 cookie,不直接依赖 backlog
# 每个端口的最大监听队列
net.core.somaxconn=4096
# 系统中所有 socket 的接收缓冲
net.core.rmem_max=16777216
# 发送缓冲
net.core.wmem_max=16777216
# 查看队列使用情况(需 ss)
ss -lnt
示例:
LISTEN 0 4096 0.0.0.0:80
第二个数字即为当前 backlog 上限。
somaxconnsyncookies如果你能说明 具体场景(如 Nginx / Java / Go / 高并发连接),我可以给出更精确的配置建议。