在 Linux 中,“backlog” 通常出现在 网络编程(TCP 连接队列) 或 systemd / syslog 日志 场景中。下面分别说明,最常见的是 TCP backlog。
backlog 是 listen() 系统调用中的一个参数,表示:
已完成连接(ESTABLISHED)但还未被 accept 的最大队列长度
⚠️ 注意:
backlog 不等于最大并发连接数,只是“半连接 / 全连接队列”的一部分。
listen(sockfd, backlog);
server_socket.listen(backlog)
listen 80 backlog=32768;
tcp-backlog 511
即使你设置了 backlog = 100000,内核也会限制它。
min(应用设置的 backlog, net.core.somaxconn)
sysctl net.core.somaxconn
默认通常是:
128
# 临时生效
sudo sysctl -w net.core.somaxconn=32768
# 永久生效
echo "net.core.somaxconn = 32768" | sudo tee -a /etc/sysctl.conf
sysctl -p
用于 SYN_RECV 状态(TCP 三次握手未完成)
sysctl net.ipv4.tcp_max_syn_backlog
默认值通常是 256 或 512
sudo sysctl -w net.ipv4.tcp_max_syn_backlog=8192
net.core.somaxconn = 32768
net.ipv4.tcp_max_syn_backlog = 8192
net.core.netdev_max_backlog = 16384
如果你指的是 systemd 日志积压:
journalctl --vacuum-size=100M
或修改:
/etc/systemd/journald.conf
SystemMaxUse=200M
ss -lnt
示例:
LISTEN 0 128 0.0.0.0:80
这里的 128 就是当前监听队列长度。
❌ backlog 越大越好
✅ 要结合内核参数 + 实际并发
❌ backlog = 最大连接数
✅ 只是队列长度
❌ 改完应用不用改内核
✅ 必须同步调整 somaxconn
Linux backlog 设置 = 应用层 listen backlog + 内核 net.core.somaxconn
如果你能具体说一下场景:
我可以给你一个 针对你业务的精确参数方案。