在 Linux 中,“backlog” 通常指 网络 socket 的监听队列长度,常见于 listen() 系统调用。下面从 概念、默认值、如何调整、验证方法 四个方面说明。
在 TCP 服务中:
listen(fd, backlog);
backlog 表示 已完成连接(ESTABLISHED)但还未被应用 accept() 的最大队列长度。
现代 Linux 中实际行为:
/proc/sys/net/core/somaxconnmin(backlog, somaxconn)cat /proc/sys/net/core/somaxconn
常见默认值:
cat /proc/sys/net/ipv4/tcp_max_syn_backlog
默认常见值:256 / 512 / 1024
sudo sysctl -w net.core.somaxconn=4096
sudo sysctl -w net.ipv4.tcp_max_syn_backlog=8192
编辑:
sudo vi /etc/sysctl.conf
添加或修改:
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 8192
使配置生效:
sudo sysctl -p
listen 80 backlog=4096;
或在 nginx.conf:
listen 80 default backlog=4096;
tcp-backlog 4096
(需确保 somaxconn ≥ 4096)
listen(fd, 4096);
serverSocket.bind(new InetSocketAddress(port), 4096);
http.ListenAndServe(":80")
(Go 默认使用系统限制)
ss -lnt
示例:
LISTEN 0 4096 0.0.0.0:80
第二个数字就是 当前 backlog
netstat -s | grep -i list
或:
ss -s
❌ backlog 设置得越大越好
✅ 实际受 somaxconn 限制
❌ backlog 能解决所有性能问题
✅ 只能是 accept 不及时 的缓冲
❌ backlog 能防止 SYN Flood
✅ 应使用 tcp_syncookies
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_syncookies = 1
如果你能说明 具体场景(如 Nginx / Redis / Java 服务 / Docker / Kubernetes),我可以给你 更精准的配置方案。