温馨提示×

linux backlog在哪里配置

小樊
45
2026-09-17 13:54:53
栏目: 智能运维

在 Linux 中,backlog 通常指 TCP 监听队列(accept queue)的长度,主要与 listen() 系统调用有关。它的“配置”分几个层面,下面按常见场景说明。


一、应用程序层(最重要)

1. listen(fd, backlog) 中的 backlog

这是最直接的配置位置。

listen(sockfd, backlog);
  • backlog 指定已完成连接(ESTABLISHED)等待 accept 的队列长度
  • 实际生效值会被内核限制(见下)

✅ 修改方式:

  • 改源码
  • 改服务配置(如 Nginx、Redis、MySQL 等)

常见服务示例

服务 配置项
Nginx listen 80 backlog=1024;
Redis tcp-backlog 511
MySQL back_log = 1024

二、内核限制(上限)

2. net.core.somaxconn

这是 backlog 的硬上限

cat /proc/sys/net/core/somaxconn

默认一般是:

  • 128(旧内核)
  • 4096(新内核)

✅ 修改方式(临时):

sysctl -w net.core.somaxconn=65535

✅ 永久生效:

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

然后:

sysctl -p

三、半连接队列(SYN Queue)

3. net.ipv4.tcp_max_syn_backlog

这是 SYN_RECV 状态队列(半连接)

cat /proc/sys/net/ipv4/tcp_max_syn_backlog

✅ 修改:

sysctl -w net.ipv4.tcp_max_syn_backlog=8192

四、完整关系图(简化)

客户端 SYN
   ↓
tcp_max_syn_backlog (半连接)
   ↓
listen backlog (受 somaxconn 限制)
   ↓
accept()

五、如何查看当前队列状态

ss -lnt

示例:

LISTEN 0 128 0.0.0.0:80
        ↑
   当前 accept 队列长度

如果有 Recv-Q 持续增长,说明:

  • accept 慢
  • backlog 太小

六、常见坑

❌ 只改 listen(1024) 但没改 somaxconn
✅ 实际生效 = min(backlog, somaxconn)

❌ 高并发服务用默认 128
✅ 建议:somaxconn=65535


七、总结一句话

Linux backlog 在“应用 listen() 里配置,受 net.core.somaxconn 限制,SYN 队列受 tcp_max_syn_backlog 控制”

如果你说的是 某具体服务(Nginx / Redis / 自写程序)某个报错(如 connection refused / overflow,可以告诉我,我可以给你精确配置。

0