温馨提示×

Linux backlog怎么设置

小樊
41
2026-08-02 03:58:02
栏目: 智能运维

在 Linux 中,“backlog” 通常出现在 网络编程(TCP 连接队列)systemd / syslog 日志 场景中。下面分别说明,最常见的是 TCP backlog


一、TCP / Socket backlog 设置(最常见)

1️⃣ backlog 是什么?

backloglisten() 系统调用中的一个参数,表示:

已完成连接(ESTABLISHED)但还未被 accept 的最大队列长度

⚠️ 注意:
backlog 不等于最大并发连接数,只是“半连接 / 全连接队列”的一部分。


2️⃣ 应用层如何设置 backlog?

C / C++

listen(sockfd, backlog);

Python

server_socket.listen(backlog)

Nginx

listen 80 backlog=32768;

Redis

tcp-backlog 511

3️⃣ Linux 内核层面的限制(非常重要)

即使你设置了 backlog = 100000内核也会限制它

✅ 实际生效的是:

min(应用设置的 backlog, net.core.somaxconn)

查看当前限制

sysctl net.core.somaxconn

默认通常是:

128

修改 somaxconn

# 临时生效
sudo sysctl -w net.core.somaxconn=32768

# 永久生效
echo "net.core.somaxconn = 32768" | sudo tee -a /etc/sysctl.conf
sysctl -p

4️⃣ TCP 半连接队列(SYN Queue)

用于 SYN_RECV 状态(TCP 三次握手未完成)

sysctl net.ipv4.tcp_max_syn_backlog

默认值通常是 256512

修改

sudo sysctl -w net.ipv4.tcp_max_syn_backlog=8192

5️⃣ 推荐的高并发设置(常见)

net.core.somaxconn = 32768
net.ipv4.tcp_max_syn_backlog = 8192
net.core.netdev_max_backlog = 16384

二、systemd / 日志 backlog(较少见)

如果你指的是 systemd 日志积压

journalctl --vacuum-size=100M

或修改:

/etc/systemd/journald.conf
SystemMaxUse=200M

三、如何确认 backlog 是否生效?

ss -lnt

示例:

LISTEN 0 128 0.0.0.0:80

这里的 128 就是当前监听队列长度。


四、常见误区

❌ backlog 越大越好
✅ 要结合内核参数 + 实际并发

❌ backlog = 最大连接数
✅ 只是队列长度

❌ 改完应用不用改内核
必须同步调整 somaxconn


五、总结一句话

Linux backlog 设置 = 应用层 listen backlog + 内核 net.core.somaxconn


如果你能具体说一下场景:

  • Nginx / Redis / 自写服务
  • 还是 高并发连接 / TCP 队列溢出

我可以给你一个 针对你业务的精确参数方案

0