端口耗尽引起的建连变慢
高并发短连接会把本地可用端口范围打满,新连接只能等待或直接失败,表现是分布式的建连变慢,而不是某一条连接异常。这类问题的证据在主机侧:查看 TIME_WAIT 状态的连接数量与端口占用分布,再结合内核端口范围参数判断是否已经接近容量上限。
基本信息
| 适用平台 | Linux |
|---|---|
| 核对命令 | ss -s、ss -tan state time-wait |
| 端口范围 | /proc/sys/net/ipv4/ip_local_port_range |
| 高发场景 | 目标端口单一且短连接并发很高 |
典型使用场景
- 客户端建连延迟整体上升,没有明显单点故障
- 排查代理层或网关侧的连接瓶颈
- 评估连接复用改造的预期收益
- 定位批量任务并发上传下载时的失败
- 为内核参数调整提供依据而不是凭经验改
主机侧核对
主机侧核对
ss -s
# 各状态连接数量总览,先看 TIME_WAIT 的量级
ss -tan state time-wait | wc -l
# 统计 TIME_WAIT 连接数,与端口范围容量对照
cat /proc/sys/net/ipv4/ip_local_port_range
# 本地端口范围,可用端口数约为上限减下限
ss -tan state time-wait | awk '{print $4}' | cut -d: -f2 | sort -n | tail -5
# 看端口占用分布,判断是否集中在区间末端观察项读法
| 观察项 | 含义 | 异常表现 |
|---|---|---|
| TIME_WAIT 数量 | 已关闭但仍占端口的连接 | 接近端口范围容量即存在风险 |
| 端口范围 | 本地可用端口区间 | 范围偏小时更容易触顶 |
| 建连失败率 | 新连接被拒绝的比例 | 上升说明端口资源紧张 |
| 连接复用率 | 复用已有连接的比例 | 提升复用可显著缓解 |
连接复用与相关内核参数是常见的缓解组合。改造为长连接或引入连接池通常比单纯调参更有效,因为它直接减少了连接建立的次数,从根源上降低端口消耗速度。
调整 TIME_WAIT 相关参数会影响协议层面的正确性,属于需要谨慎评估的操作。另外客户端与代理侧都可能成为端口瓶颈,排查时两侧都要看,只查一侧容易漏掉真正的原因。
排查顺序
- 先确认症状:是否表现为大范围的建连延迟或间歇性失败
- 在客户端侧统计 TIME_WAIT 数量与端口占用分布
- 对照端口范围容量,估算再高多少并发就会触顶
- 检查代理与网关侧是否同样存在端口压力
- 从减少连接建立次数入手改造,再评估是否需要调参