在 Linux 中,“backlog 满了”不是一个单一问题,而是要看具体场景。下面按最常见的几种情况给你排查思路和解决办法。
dmesg 或 /var/log/messages 里可能出现:TCP: drop open request from ...
TCP: Possible SYN flooding on port 80
ss -lt 看到 Recv-Q 很高listen(fd, backlog) 太小ss -lt
示例:
LISTEN 0 128 0.0.0.0:80
如果 Recv-Q 接近 Send-Q,说明 backlog 满了。
listen 80 backlog=2048;
server.setBacklog(2048);
listen() 的 backlog 参数sysctl -w net.core.somaxconn=4096
sysctl -w net.ipv4.tcp_max_syn_backlog=8192
永久生效:
cat >> /etc/sysctl.conf <<EOF
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 8192
EOF
sysctl -p
✅ 建议:
listen backlog ≤ somaxconn
SYN_RECVss -s
sysctl -w net.ipv4.tcp_syncookies=1
✅ 这是 Linux 防止 SYN Flood 的标准做法
No space left on devicedf 有空间,但 df -i 满了df -h
df -i
journalctl -f 卡顿journalctl --vacuum-time=7d
或限制大小:
journalctl --vacuum-size=500M
你可以按顺序执行:
ss -lt
ss -s
dmesg | tail
df -h
df -i
sysctl net.core.somaxconn
请告诉我:
我可以直接给你精确到参数的解决方案。