温馨提示×

怎么修改linux backlog

小樊
50
2026-09-11 08:30:46
栏目: 智能运维

在 Linux 中,“backlog” 常见于 TCP 监听队列(accept queue)内核网络参数 场景。下面分情况说明如何修改。


一、应用程序中的 listen backlog(最常见)

1. 代码中设置

在 socket 编程中,通过 listen() 的第二个参数指定:

listen(sockfd, backlog);

注意:
实际生效的 backlog = min(应用设置的backlog, 内核参数 somaxconn)

2. 常见服务示例

  • Nginx
    listen 80 backlog=1024;
    
  • Redis
    tcp-backlog 511
    
  • Java(Netty / Tomcat)
    • Tomcat:server.xmlacceptCount="1024"
    • Netty:serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024)

二、修改内核参数 somaxconn(系统级 backlog 上限)

查看当前值

cat /proc/sys/net/core/somaxconn

临时修改

sysctl -w net.core.somaxconn=1024

永久修改

编辑 /etc/sysctl.conf

net.core.somaxconn = 1024

然后执行:

sysctl -p

三、TCP 全连接 / 半连接队列相关参数

1. 半连接队列(SYN Queue)

tcp_max_syn_backlog 控制:

sysctl -w net.ipv4.tcp_max_syn_backlog=8192

永久:

net.ipv4.tcp_max_syn_backlog = 8192

2. 全连接队列长度

min(somaxconn, listen backlog) 决定


四、查看当前队列使用情况(排障)

ss -lnt

示例输出:

State  Recv-Q Send-Q Local Address:Port
LISTEN 0      128    *:80
  • Send-Q:当前 accept queue 长度
  • 如果 Recv-Q 持续增长,说明应用处理慢或 backlog 太小

五、容器 / 云环境注意

  • Docker 默认继承宿主机 somaxconn
  • Kubernetes 中可通过 initContainer 修改:
    sysctl -w net.core.somaxconn=1024
    

如果你能说明:

  • 哪个服务(Nginx / Redis / 自研程序)
  • 还是 系统调优

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

0