首页/网络/网络排障速查/半连接与 accept 队列溢出
本包目录(235 条)

半连接与 accept 队列溢出

新连接建不上而进程活着,常见根因是 backlog 太小:内核 SYN 队列或 accept 队列溢出、SYN 被丢;netstat -s / nstat 会记录 ListenOverflows 与 ListenDrops。

网络排障速查网络更新于 2026-10-12

证据链

证据链
nstat -az | grep -iE 'ListenOverflows|ListenDrops|TCPReqQFullDrop|SyncookiesSent'
sysctl net.core.somaxconn net.ipv4.tcp_max_syn_backlog
ss -lnt 'sport = :80'     # LISTEN 行:Recv-Q > Send-Q = accept 队列已溢出
netstat -s | grep -i listen
SYN 队列存放收到 SYN、尚未完成握手(≤tcp_max_syn_backlog)
accept 队列已完成握手、等待应用 accept(≤listen backlog 与 somaxconn 的小值)
溢出后果客户端看到超时/重试,服务端可能没有任何日志
nginx 的 backlog 默认 511,与 net.core.somaxconn 取小值生效;后端处理慢时先满的是 accept 队列。

易错点

  • 只调 somaxconn 不改应用侧 listen 参数,取小值仍然不生效
  • 忽略 LISTEN 行 Recv-Q/Send-Q 的关系:前者大于后者就是队列溢出的直接证据

数据来源与参考

  • man 2 listen(backlog 语义)
  • man 8 nstat
  • nginx 文档:listen backlog

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌