背景
监听端口存在,却仍有客户端连接超时,问题可能出在握手或应用接收速度。不同 TCP 队列反映不同阶段,不能混为一谈。
核心判断
- 区分握手中的请求队列与等待 accept 的连接队列。
- 把 ss 的监听队列与 ListenOverflows、ListenDrops 对照。
- 同时检查应用 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 速率放在同一时间轴。