在 Linux 里,“backlog” 这个词不是单一概念,不同场景含义不同。下面按最常见的几种情况给你说明,并附上查看方法。
指 socket 处于 SYN_RECV / ESTABLISHED 但未 accept 的连接队列长度。
sysctl net.core.somaxconn
sysctl net.ipv4.tcp_max_syn_backlog
常见默认值:
net.core.somaxconn = 4096net.ipv4.tcp_max_syn_backlog = 8192ss -lnt
示例输出:
LISTEN 0 128 0.0.0.0:80
其中:
128 就是 当前监听 socket 的 backlogsomaxconn + 应用代码 listen(fd, backlog) 影响✅ 实际 backlog = min(应用设置, somaxconn)
netstat -s | grep -i "SYNs"
或:
ss -s
关注:
SYNs to LISTEN sockets dropped
如果有值且持续增长,说明 半连接队列溢出(syn backlog 满)
ss -lnt
如果看到:
LISTEN 0 128
但连接很多,仍可能溢出。
更精确方式:
cat /proc/net/sockstat
或:
watch -n1 'ss -lnt | grep 80'
nginx -T 2>/dev/null | grep backlog
或:
listen 80 backlog=2048;
redis-cli CONFIG GET tcp-backlog
jstack pid | grep -i backlog
cat /proc/interrupts
iostat -x 1
关注:
avgqu-sz
| 现象 | 检查命令 |
|---|---|
| 连接建立慢 | ss -lnt |
| 丢连接 | netstat -s |
| 半连接多 | tcp_max_syn_backlog |
| 应用 accept 慢 | 应用 backlog 设置 |
Linux 中 backlog 通常指 TCP 连接队列,用
ss -lnt看当前值,用netstat -s判断是否溢出。
如果你能具体说一下:
我可以给你更精准的定位和调优建议。