温馨提示×

linux backlog怎么配置

小樊
39
2026-09-26 15:04:29
栏目: 智能运维

在 Linux 中,backlog 通常出现在两个场景:

  1. TCP 监听队列 backlog(listen() 的 backlog)
  2. 内核网络相关 backlog 参数(全连接 / 半连接队列)

下面分情况说明如何配置。


一、TCP listen() 的 backlog(应用层)

1. 应用代码中的 backlog

listen(sockfd, backlog);
  • backlog 表示**已完成连接(accept 队列)**的队列长度上限(历史含义,现在受内核限制)
  • 实际生效值 = min(backlog, /proc/sys/net/core/somaxconn)

示例(Python):

server.listen(128)

二、内核层面的 backlog 配置(重要)

1. 全连接队列上限(accept queue)

cat /proc/sys/net/core/somaxconn

默认一般是 128 或 4096

修改:

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

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

2. 半连接队列上限(SYN queue)

cat /proc/sys/net/ipv4/tcp_max_syn_backlog

默认通常是 1024

修改:

sysctl -w net.ipv4.tcp_max_syn_backlog=8192

3. 端口复用 & TIME_WAIT 优化(常配合 backlog)

sysctl -w net.ipv4.tcp_tw_reuse=1

三、如何确认 backlog 是否够用

查看连接队列溢出

netstat -s | grep -i listen

或

ss -lnt

关注:

  • Recv-Q 接近 Send-Q → 队列可能满
  • TCPBacklogDrop 增长 → backlog 不够

四、典型推荐配置(高并发服务)

net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1

五、注意事项

  • backlog ≠ 并发连接数
  • 应用层 listen(backlog) 只是“建议值”
  • 容器环境中需宿主内核参数生效

如果你是指 Nginx / Redis / 某个具体服务 的 backlog 配置,可以告诉我具体场景,我可以给针对性配置。

0 踩