在 Linux 里,“backlog” 通常指 网络 socket 的半连接/全连接队列,或者 监听队列长度。下面按常见场景说明如何查看。
ss -lnt
示例输出:
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
含义:
listen() 时设置的 backlog 上限✅ 如果 Recv-Q 经常接近 Send-Q,说明 backlog 满了,可能发生连接丢弃。
cat /proc/sys/net/ipv4/tcp_max_syn_backlog
示例:
1024
这是内核允许的最大半连接数。
cat /proc/sys/net/core/somaxconn
示例:
4096
⚠️ 应用调用 listen(fd, backlog) 时:
实际 backlog = min(应用 backlog, somaxconn)
netstat -s | grep -i syn
或:
ss -s
关注类似:
SYNs to LISTEN sockets dropped
netstat -s | grep -i listen
例如:
times the listen queue of a socket overflowed
nginx -V 2>&1 | grep backlog
或在配置中:
listen 80 backlog=2048;
server.tomcat.accept-count(全连接队列)server.tomcat.max-connections查看是否设置过小。
sysctl -w net.core.somaxconn=8192
sysctl -w net.ipv4.tcp_max_syn_backlog=8192
vim /etc/sysctl.conf
添加:
net.core.somaxconn = 8192
net.ipv4.tcp_max_syn_backlog = 8192
生效:
sysctl -p
| 现象 | 原因 |
|---|---|
| 连接超时 | backlog 过小 |
| SYN 丢包 | tcp_max_syn_backlog 满 |
| accept 不及时 | somaxconn 限制 |
| 新连接被拒绝 | 全连接队列溢出 |
如果你是想查看某个具体服务(如 Nginx、Redis、MySQL)的 backlog,或是在排查连接失败问题,可以告诉我:
我可以帮你一步步定位。