在 Linux 中,“backlog” 通常指 TCP 监听队列(accept queue)的长度,也就是 listen(socket, backlog) 中的参数。修改 backlog 大小需要从 应用程序、系统内核参数 两个层面入手。
listen() 参数backlog 最直接由应用程序决定:
listen(sockfd, backlog);
例如 Nginx、Redis、MySQL 等都有对应配置:
listen 80 backlog=1024;
tcp-backlog 1024
很多程序支持环境变量或配置文件设置。
Linux 中 实际 backlog = min(应用设置, 内核上限)。
cat /proc/sys/net/core/somaxconn
默认通常是:
128
somaxconn(核心参数)这是 accept 队列最大长度。
sysctl -w net.core.somaxconn=1024
编辑 /etc/sysctl.conf:
net.core.somaxconn=1024
然后执行:
sysctl -p
如果是 大量 SYN 但连接不上,还要看半连接队列。
net.ipv4.tcp_max_syn_backlog
sysctl -w net.ipv4.tcp_max_syn_backlog=8192
永久:
net.ipv4.tcp_max_syn_backlog=8192
完整关系:
SYN Queue (半连接)
↓
Accept Queue (backlog / somaxconn)
如果 Accept Queue 满:
netstat 看到 Recv-Q 很大查看:
ss -lnt
net.core.somaxconn = 1024~65535
net.ipv4.tcp_max_syn_backlog = 8192~16384
如果你能告诉我:
我可以给你更精确的修改方案。