在 Linux 中,backlog 通常出现在两个场景:
listen() 的 backlog)下面分情况说明如何配置。
listen() 的 backlog(应用层)listen(sockfd, backlog);
backlog 表示**已完成连接(accept 队列)**的队列长度上限(历史含义,现在受内核限制)min(backlog, /proc/sys/net/core/somaxconn)示例(Python):
server.listen(128)
cat /proc/sys/net/core/somaxconn
默认一般是 128 或 4096
修改:
# 临时
sysctl -w net.core.somaxconn=4096
# 永久
echo "net.core.somaxconn = 4096" >> /etc/sysctl.conf
sysctl -p
cat /proc/sys/net/ipv4/tcp_max_syn_backlog
默认通常是 1024
修改:
sysctl -w net.ipv4.tcp_max_syn_backlog=8192
sysctl -w net.ipv4.tcp_tw_reuse=1
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 配置,可以告诉我具体场景,我可以给针对性配置。