在 Linux 中,backlog 通常指 TCP 监听队列(accept queue)的长度,主要与 listen() 系统调用有关。它的“配置”分几个层面,下面按常见场景说明。
listen(fd, backlog) 中的 backlog这是最直接的配置位置。
listen(sockfd, backlog);
backlog 指定已完成连接(ESTABLISHED)等待 accept 的队列长度✅ 修改方式:
| 服务 | 配置项 |
|---|---|
| Nginx | listen 80 backlog=1024; |
| Redis | tcp-backlog 511 |
| MySQL | back_log = 1024 |
net.core.somaxconn这是 backlog 的硬上限
cat /proc/sys/net/core/somaxconn
默认一般是:
128(旧内核)4096(新内核)✅ 修改方式(临时):
sysctl -w net.core.somaxconn=65535
✅ 永久生效:
# /etc/sysctl.conf
net.core.somaxconn=65535
然后:
sysctl -p
net.ipv4.tcp_max_syn_backlog这是 SYN_RECV 状态队列(半连接)
cat /proc/sys/net/ipv4/tcp_max_syn_backlog
✅ 修改:
sysctl -w net.ipv4.tcp_max_syn_backlog=8192
客户端 SYN
↓
tcp_max_syn_backlog (半连接)
↓
listen backlog (受 somaxconn 限制)
↓
accept()
ss -lnt
示例:
LISTEN 0 128 0.0.0.0:80
↑
当前 accept 队列长度
如果有 Recv-Q 持续增长,说明:
❌ 只改 listen(1024) 但没改 somaxconn
✅ 实际生效 = min(backlog, somaxconn)
❌ 高并发服务用默认 128
✅ 建议:somaxconn=65535
Linux backlog 在“应用 listen() 里配置,受
net.core.somaxconn限制,SYN 队列受tcp_max_syn_backlog控制”
如果你说的是 某具体服务(Nginx / Redis / 自写程序) 或 某个报错(如 connection refused / overflow),可以告诉我,我可以给你精确配置。