温馨提示×

如何调大linux backlog

小樊
47
2026-09-14 13:13:25
栏目: 智能运维

在 Linux 中,“backlog” 通常出现在 TCP 监听队列内核参数 两个层面。下面分情况说明如何“调大”。


一、TCP 监听 backlog(最常见)

1. 应用程序层面

在代码中通过 listen() 设置:

listen(sockfd, backlog);
  • backlog应用期望的队列长度
  • 实际生效值受内核参数限制(见下)

常见服务示例:

  • Nginx
    listen 80 backlog=1024;
    
  • Redis
    tcp-backlog 1024
    
  • Java (Netty / Tomcat)
    • Tomcat:server.xmlacceptCount="1024"

2. 内核参数限制(关键)

Linux 实际 backlog 取:

min(应用 backlog, /proc/sys/net/core/somaxconn)

查看当前值

cat /proc/sys/net/core/somaxconn

默认通常是 1284096

临时修改

sysctl -w net.core.somaxconn=65535

永久修改

# /etc/sysctl.conf
net.core.somaxconn = 65535

然后执行:

sysctl -p

二、SYN 队列(半连接队列)

用于 TCP 三次握手未完成阶段。

相关参数

net.ipv4.tcp_max_syn_backlog

查看

cat /proc/sys/net/ipv4/tcp_max_syn_backlog

修改

sysctl -w net.ipv4.tcp_max_syn_backlog=65535

永久:

# /etc/sysctl.conf
net.ipv4.tcp_max_syn_backlog = 65535

三、全连接队列长度计算(重要)

实际全连接队列长度:

min(somaxconn, 应用 backlog)

可通过 ss 查看是否溢出:

ss -lnt

示例输出:

LISTEN 0 128 0.0.0.0:80
  • 第二个数字(128)就是当前 backlog

查看溢出情况:

netstat -s | grep -i listen

nstat | grep -i ListenOverflows

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

net.core.netdev_max_backlog = 65535
net.ipv4.tcp_syncookies = 1   # 防止 SYN Flood

五、示例:高并发服务器推荐配置

net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.core.netdev_max_backlog = 65535

六、常见误区

❌ 只改应用 backlog 不生效
✅ 必须同时调大 somaxconn

❌ 盲目调太大
✅ 队列过大可能掩盖性能问题


如果你能告诉我:

  • 使用的服务(Nginx / Redis / 自研程序)
  • Linux 发行版和内核版本

我可以给你更精确的配置建议。

0