温馨提示×

如何增大linux backlog

小樊
38
2026-09-23 16:39:59
栏目: 智能运维

在 Linux 中,“backlog” 常见于 网络 socket(listen backlog) 和 内核/应用队列 场景。下面重点说明最常见、最容易踩坑的 socket listen backlog 增大方法,并补充其他相关 backlog。


一、TCP listen backlog(最常见)

1️⃣ 应用层设置(必须做)

在代码中调用:

listen(sockfd, backlog);

例如:

listen(sockfd, 1024);

⚠️ 注意:
实际生效的 backlog 不是你写多少就用多少。


2️⃣ 内核参数限制(关键)

Linux 中实际 backlog 取:

min(应用 backlog, net.core.somaxconn)

查看当前值

cat /proc/sys/net/core/somaxconn

默认通常是:

  • 128(很多发行版)

临时修改

sysctl -w net.core.somaxconn=4096

永久修改

编辑:

/etc/sysctl.conf

添加:

net.core.somaxconn = 4096

生效:

sysctl -p

3️⃣ TCP 半连接队列(SYN backlog)

如果大量 SYN 过来,还需调整:

sysctl -w net.ipv4.tcp_max_syn_backlog=8192

永久:

net.ipv4.tcp_max_syn_backlog = 8192

4️⃣ 端口复用 & 快速回收(高并发常见)

sysctl -w net.ipv4.tcp_tw_reuse=1

(生产环境慎用 tcp_tw_recycle,已废弃)


二、验证是否生效

查看 listen 队列

ss -lnt

或:

netstat -lnt

示例:

LISTEN 0 4096 0.0.0.0:8080

第二个数字就是 当前 backlog


三、其他常见 backlog

1️⃣ 文件系统 / 内核队列

net.core.netdev_max_backlog

(网络接收软中断队列)

sysctl -w net.core.netdev_max_backlog=16384

2️⃣ Nginx / 应用层 backlog

Nginx:

listen 80 backlog=4096;

3️⃣ systemd 服务

某些服务受 systemd 限制,可在 service 中:

[Service]
LimitNOFILE=100000

四、常见误区 ❌

  • ❌ 只改应用 listen(..., 65535) 不生效
  • ❌ 忽略 somaxconn
  • ❌ 以为 backlog 是“连接数上限”(其实是等待 accept 的队列长度)

如果你能说明:

  • 使用场景(Web / RPC / 游戏 / 高并发)
  • 语言(C / Go / Java / Nginx)
  • 具体报错或现象

我可以给你更精确的参数组合。

0 踩