在 Linux 中,backlog 常见于两个地方:TCP 监听队列(accept queue) 和 内核网络参数。下面分情况说明“配置在哪”。
backlog 是在 应用程序调用 listen(sockfd, backlog) 时设置的。
例如:
listen(sockfd, 128);
常见服务配置位置:
listen 80 backlog=1024;
tcp-backlog 511
Linux 内核有两个关键参数:
net.core.somaxconn控制 accept 队列最大长度
查看:
cat /proc/sys/net/core/somaxconn
修改(临时):
sysctl -w net.core.somaxconn=1024
永久生效:
# /etc/sysctl.conf
net.core.somaxconn=1024
然后:
sysctl -p
net.ipv4.tcp_max_syn_backlog控制 SYN 队列(半连接)长度
查看:
cat /proc/sys/net/ipv4/tcp_max_syn_backlog
修改:
sysctl -w net.ipv4.tcp_max_syn_backlog=8192
实际监听队列长度 =
min(listen backlog, net.core.somaxconn)
例如:
listen(sock, 512)somaxconn = 128
→ 实际为 128ss -lnt
输出示例:
State Recv-Q Send-Q Local Address:Port
LISTEN 0 128 *:80
Send-Q 就是当前 backlog 上限| 配置项 | 位置 |
|---|---|
| 应用 backlog | listen() / Nginx / Redis 配置 |
| 上限 | /proc/sys/net/core/somaxconn |
| SYN 队列 | /proc/sys/net/ipv4/tcp_max_syn_backlog |
如果你说的是 某一个具体服务(Nginx / Redis / Kafka / 自研程序),可以告诉我,我可以直接给你对应配置位置。