Linux backlog快速定位
一 核心概念与判断要点
二 一键定位流程
三 常见现象与对应结论
| 现象 | 重点指标/抓包特征 | 高概率原因 | 建议动作 |
|---|---|---|---|
| 客户端偶发连接被拒或超时 | ss Recv-Q≈Send-Q;netstat -s 出现 listen queue overflowed | 全连接队列满,应用 accept 不及时或 backlog 过小 | 提高应用 backlog;提高 net.core.somaxconn;优化 accept 线程/异步模型 |
| 新连接建立慢,抓包见大量重传 SYN | tcpdump 大量 SYN、无或少量 SYN+ACK | 半连接队列满/被丢弃(如 tcp_max_syn_backlog 偏小、SYN 洪泛、防火墙丢弃) | 增大 tcp_max_syn_backlog;核查防火墙/安全组;必要时启用 syn_cookies |
| 三次握手完成但首包失败 | 抓包有 SYN、SYN+ACK、ACK;netstat -s 见 SYNs to LISTEN dropped | 全连接队列溢出(应用 accept 太慢) | 加速 accept 消费;提高 backlog/somaxconn;考虑 tcp_abort_on_overflow 让客户端快速失败 |
| 偶发 RST/连接异常 | 客户端收到 RST | 队列溢出后内核发送 RST(取决于 tcp_abort_on_overflow) | 先定位根因(accept 慢/队列小),再决定是否开启 tcp_abort_on_overflow |
| 说明:全连接队列上限为min(backlog, somaxconn);半连接队列上限通常≥64且受tcp_max_syn_backlog影响;队列溢出时内核可能计数“listen queue overflowed”或“SYNs to LISTEN dropped”。 |
四 临时处置与验证