温馨提示×

怎样修改linux backlog大小

小樊
36
2026-09-17 13:45:51
栏目: 智能运维

在 Linux 中,“backlog” 通常指 TCP 监听队列(accept queue)的长度,也就是 listen(socket, backlog) 中的参数。修改 backlog 大小需要从 应用程序、系统内核参数 两个层面入手。


一、应用程序层面(最常见)

1. 修改代码中的 listen() 参数

backlog 最直接由应用程序决定:

listen(sockfd, backlog);

例如 Nginx、Redis、MySQL 等都有对应配置:

Nginx

listen 80 backlog=1024;

Redis

tcp-backlog 1024

通用服务(systemd 启动)

很多程序支持环境变量或配置文件设置。


二、系统内核层面(上限限制)

Linux 中 实际 backlog = min(应用设置, 内核上限)

1. 查看当前限制

cat /proc/sys/net/core/somaxconn

默认通常是:

128

2. 修改 somaxconn(核心参数)

这是 accept 队列最大长度

临时修改

sysctl -w net.core.somaxconn=1024

永久修改

编辑 /etc/sysctl.conf

net.core.somaxconn=1024

然后执行:

sysctl -p

三、TCP 半连接队列(SYN Queue)

如果是 大量 SYN 但连接不上,还要看半连接队列。

相关参数

net.ipv4.tcp_max_syn_backlog

修改

sysctl -w net.ipv4.tcp_max_syn_backlog=8192

永久:

net.ipv4.tcp_max_syn_backlog=8192

四、端口监听队列长度(已建立但未 accept)

完整关系:

SYN Queue (半连接)
   ↓
Accept Queue (backlog / somaxconn)

如果 Accept Queue 满:

  • 客户端会超时
  • netstat 看到 Recv-Q 很大

查看:

ss -lnt

五、常见推荐值(高并发场景)

net.core.somaxconn = 1024~65535
net.ipv4.tcp_max_syn_backlog = 8192~16384

六、注意点

  1. 改了内核参数,应用也要改
  2. 容器环境(Docker/K8s)可能继承宿主机参数
  3. 某些语言(如 Python/Go)有默认 backlog 限制

如果你能告诉我:

  • 用的是 什么服务(Nginx / Redis / 自研程序)
  • 报错现象(连接超时 / SYN 丢包)

我可以给你更精确的修改方案。

0