在 Linux 中,**backlog(积压队列)**通常指的是以下几种场景之一,不同场景的“限制”不一样:
listen() 的 backlog这是最常见的“backlog”概念。
int listen(int sockfd, int backlog);
backlog 表示 已完成三次握手但尚未被 accept() 的连接队列长度上限(在某些内核版本中,还包括半连接队列的综合考量)。
min(backlog, /proc/sys/net/core/somaxconn)
作为实际生效值cat /proc/sys/net/core/somaxconn
默认值通常是:
# 临时
sysctl -w net.core.somaxconn=65535
# 永久
echo "net.core.somaxconn=65535" >> /etc/sysctl.conf
sysctl -p
在 TCP 三次握手期间:
cat /proc/sys/net/ipv4/tcp_max_syn_backlog
默认值常见为:
sysctl -w net.ipv4.tcp_max_syn_backlog=8192
| 队列类型 | 状态 | 控制参数 |
|---|---|---|
| 半连接队列 | SYN_RECV | tcp_max_syn_backlog |
| 全连接队列 | ESTABLISHED(未 accept) | min(backlog, somaxconn) |
/proc/sys/net/core/netdev_max_backlog
somaxconn 限制Linux 中 listen backlog 的硬上限是
net.core.somaxconn,应用设置的 backlog 只会取最小值。
如果你是指 某个具体服务(Nginx、Redis、MySQL)或某个内核版本的 backlog 限制,可以告诉我,我给你具体数值和建议配置。