Linux TCP 队列:从 listen backlog 追到应用读取

背景 监听端口存在,却仍有客户端连接超时,问题可能出在握手或应用接收速度。不同 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 速率放在同一时间轴。

2026年10月7日 · 1 分钟 · BvBeJ