温馨提示×

linux backlog限制是多少

小樊
42
2026-10-14 04:57:59
栏目: 智能运维

在 Linux 中,**backlog(积压队列)**通常指的是以下几种场景之一,不同场景的“限制”不一样:


1. TCP / socket listen() 的 backlog

这是最常见的“backlog”概念。

函数原型

int listen(int sockfd, int backlog);

实际含义

backlog 表示 已完成三次握手但尚未被 accept() 的连接队列长度上限(在某些内核版本中,还包括半连接队列的综合考量)。

实际限制

  • 应用层传入的 backlog 不是最终值
  • 内核会用:
    min(backlog, /proc/sys/net/core/somaxconn)
    
    作为实际生效值

查看系统最大限制

cat /proc/sys/net/core/somaxconn

默认值通常是:

  • 老内核:128
  • 新内核(如 5.x+):常是 4096

修改方式

# 临时
sysctl -w net.core.somaxconn=65535

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

2. 半连接队列(SYN Queue)

在 TCP 三次握手期间:

  • SYN_RECV 状态的连接放在半连接队列

相关参数

cat /proc/sys/net/ipv4/tcp_max_syn_backlog

默认值常见为:

  • 1024 或更高(取决于内存)

修改

sysctl -w net.ipv4.tcp_max_syn_backlog=8192

3. 全连接队列 vs 半连接队列总结

队列类型 状态 控制参数
半连接队列 SYN_RECV tcp_max_syn_backlog
全连接队列 ESTABLISHED(未 accept) min(backlog, somaxconn)

4. 其他“backlog”场景(补充)

  • netdev backlog(网卡收包)
    /proc/sys/net/core/netdev_max_backlog
    
  • Nginx / Redis 等应用的 backlog 它们最终也受 somaxconn 限制

总结一句话

Linux 中 listen backlog 的硬上限是 net.core.somaxconn,应用设置的 backlog 只会取最小值。

如果你是指 某个具体服务(Nginx、Redis、MySQL)或某个内核版本的 backlog 限制,可以告诉我,我给你具体数值和建议配置。

0 踩