温馨提示×

怎样增大linux backlog

小樊
39
2026-10-02 11:06:53
栏目: 智能运维

在 Linux 中,“backlog” 常见于 TCP 监听队列(listen backlog) 和 syn backlog(半连接队列)。下面分别说明如何增大。


一、增大 TCP listen backlog(已完成连接队列)

1. 应用程序层面

在代码中调用:

listen(sockfd, backlog);

backlog 是上限建议值,实际值受内核限制。

例如在 Nginx 中:

listen 80 backlog=1024;

2. 系统层面限制(核心参数)

(1)somaxconn(全连接队列最大长度)

# 查看
cat /proc/sys/net/core/somaxconn

# 临时修改
sysctl -w net.core.somaxconn=4096

# 永久修改
echo "net.core.somaxconn=4096" >> /etc/sysctl.conf
sysctl -p

listen backlog 实际值 = min(应用 backlog, somaxconn)


二、增大 SYN backlog(半连接队列)

1. tcp_max_syn_backlog

# 查看
cat /proc/sys/net/ipv4/tcp_max_syn_backlog

# 修改
sysctl -w net.ipv4.tcp_max_syn_backlog=8192

2. 开启 SYN Cookie(防 SYN Flood)

sysctl -w net.ipv4.tcp_syncookies=1

开启后,SYN 队列满时会使用 cookie,不直接依赖 backlog


三、其他相关参数(高并发场景)

# 每个端口的最大监听队列
net.core.somaxconn=4096

# 系统中所有 socket 的接收缓冲
net.core.rmem_max=16777216

# 发送缓冲
net.core.wmem_max=16777216

四、验证是否生效

# 查看队列使用情况(需 ss)
ss -lnt

示例:

LISTEN 0 4096 0.0.0.0:80

第二个数字即为当前 backlog 上限。


五、常见误区

  • ❌ 只改应用 backlog 不生效 → 必须调 somaxconn
  • ❌ SYN 队列满就调大 backlog → 可能应先开 syncookies
  • ❌ backlog 越大越好 → 过大会占用更多内存

如果你能说明 具体场景(如 Nginx / Java / Go / 高并发连接),我可以给出更精确的配置建议。

0 踩