背景

监听端口存在,却仍有客户端连接超时,问题可能出在握手或应用接收速度。不同 TCP 队列反映不同阶段,不能混为一谈。

核心判断

  1. 区分握手中的请求队列与等待 accept 的连接队列。
  2. 把 ss 的监听队列与 ListenOverflows、ListenDrops 对照。
  3. 同时检查应用 accept 速度、FD 限额和调度延迟。

最小示例

下面保留核心逻辑;业务类型、调用入口和环境配置按项目补齐。

ss -lntp; ss -s; nstat -az | grep -E 'Listen|Syncookies|Retrans'; cat /proc/net/netstat | grep Listen

边界与误区

提高 backlog 只是增加缓冲,不能解决长期接收能力不足。Syncookies 也不是业务容量扩展机制,队列含义要按 socket 状态解读。

验证方式

在受控环境制造连接突发,观察计数器增量和客户端连接耗时;若队列稳定增长,先查服务线程和资源限额,再逐项调参。

小结

把 SYN 队列、accept 队列、socket 状态和应用 accept 速率放在同一时间轴。