在 Linux 中,backlog 出现在多个地方,含义和配置位置不同。常见主要有以下几类:
listen() 的 backlog)由程序在调用 listen(sockfd, backlog) 时指定,例如:
listen 80 backlog=512;tcp-backlog 511listen(fd, 1024)⚠️ 注意:
实际生效的是:
min(应用设置的 backlog, /proc/sys/net/core/somaxconn)
somaxconn)# 查看
cat /proc/sys/net/core/somaxconn
# 临时修改
sysctl -w net.core.somaxconn=1024
# 永久修改
vim /etc/sysctl.conf
net.core.somaxconn = 1024
sysctl -p
用于 TCP 三次握手未完成连接:
# 查看
cat /proc/sys/net/ipv4/tcp_max_syn_backlog
# 修改
sysctl -w net.ipv4.tcp_max_syn_backlog=8192
同样可写入 /etc/sysctl.conf。
netdev_max_backlog)指网卡接收到内核协议栈的队列长度:
cat /proc/sys/net/core/netdev_max_backlog
sysctl -w net.core.netdev_max_backlog=2000
| 服务 | 配置项 | 文件 |
|---|---|---|
| Nginx | backlog= |
nginx.conf |
| Redis | tcp-backlog |
redis.conf |
| HAProxy | backlog |
haproxy.cfg |
| Java | server.tomcat.accept-count |
Spring 配置 |
# 查看连接队列溢出
netstat -s | grep -i listen
# 查看全连接队列长度
ss -lnt
net.core.somaxconntcp_max_syn_backlog如果你指的是某个具体服务(Nginx / Redis / 自研程序等),可以告诉我,我给你精确配置方式。