在 Linux 里,“backlog” 不同场景含义不一样,监控方式也不同。下面按最常见的几种 backlog给你一个实用速查表,你可以直接对照用。
listen(fd, backlog) 里的 backlog主要关注 Accept queue 是否溢出。
ssss -lnt
重点看:
Recv-Q
Send-Q
对 LISTEN 状态:
Recv-Q:当前 Accept queue 长度Send-Q:backlog 上限✅ 例子:
LISTEN 0 128 0.0.0.0:80
表示:
⚠️ 如果 Recv-Q == Send-Q,说明 backlog 满了
netstat -s | grep -i listen
关注:
times the listen queue of a socket overflowed
或:
grep -i overflow /proc/net/snmp
✅ 只要数值在增长,就说明 backlog 不够
watch -n1 'ss -lnt | grep LISTEN'
netstat -s | grep -i syn
关注:
SYNs to LISTEN sockets dropped
sysctl net.core.somaxconn
sysctl net.ipv4.tcp_max_syn_backlog
常见默认值:
somaxconn = 128tcp_max_syn_backlog = 1024✅ 可调优:
sysctl -w net.core.somaxconn=4096
listen(fd, backlog)
⚠️ 注意:
min(backlog, net.core.somaxconn)
systemctl show your.socket | grep Backlog
docker inspect <container> | grep -i backlog
accept() 变慢ss -lnt 中 Recv-Q == Send-Qnetstat -s 中 overflow 增加关注:
node_netstat_ListenOverflowsnode_sockstat_sockets_inusess -lnt | awk '
NR>1 {
if ($2 >= $3) {
print "⚠️ Backlog FULL:", $4
}
}'
❌ backlog 大 ≠ 性能好
✅ backlog 只是 临时缓冲
真因通常是:
accept() 慢如果你愿意,可以告诉我:
我可以直接给你 针对性调优方案 + 监控命令组合。