在 Linux 中,“backlog” 通常出现在 网络编程(TCP 监听队列) 或 内核 / 系统参数 场景里。下面分几种常见情况说明如何设置。
在调用 listen() 时指定 backlog:
listen(sockfd, backlog);
backlog 表示 已完成连接(ESTABLISHED)队列长度上限Linux 实际生效的 backlog 是:
min(backlog, /proc/sys/net/core/somaxconn)
cat /proc/sys/net/core/somaxconn
默认一般是 128 或 4096(取决于发行版)
sysctl -w net.core.somaxconn=65535
编辑 /etc/sysctl.conf 或 /etc/sysctl.d/*.conf:
net.core.somaxconn = 65535
然后执行:
sysctl -p
用于 TCP 三次握手未完成连接:
cat /proc/sys/net/ipv4/tcp_max_syn_backlog
sysctl -w net.ipv4.tcp_max_syn_backlog=8192
永久:
net.ipv4.tcp_max_syn_backlog = 8192
listen 80 backlog=65535;
⚠️ 同样受 somaxconn 限制
Redis 示例:
tcp-backlog 65535
前提:
net.core.somaxconn = 65535
ss -lnt
示例输出:
State Recv-Q Send-Q Local Address:Port
LISTEN 0 128 *:80
Send-Q 即当前 backlog 上限❌ backlog 越大越好
✅ 应根据并发量和内存合理设置
❌ 只改应用不改进内核
✅ 必须同步调整 somaxconn
如果你能告诉我:
我可以给你更精确的建议。