← 返回首页

TIME_WAIT 的副作用与优化

  • 副作用:在高并发短连接场景下(如压测、网关),主动关闭方会产生大量的 TIME_WAIT 连接,耗尽本地端口资源( ephemeral ports),导致无法建立新连接(报错 Cannot assign requested address)。
  • 优化方案(需谨慎):
    • 开启 tcp_tw_reuse (Linux):允许将 TIME_WAIT 状态的端口复用于新的外出连接(作为客户端)。这是最推荐的方案,安全且有效。
      • sysctl -w net.ipv4.tcp_tw_reuse=1
    • 调整 tcp_fin_timeout:缩短 TIME_WAIT 的持续时间(默认 60s),但有轻微风险。
    • 避免由客户端主动关闭:在长连接场景中,尽量让服务端主动关闭连接(虽然通常不现实,因为服务端通常是无状态的)。
    • 不要随意开启 tcp_tw_recycle:该选项在 NAT 环境下会导致严重的连接问题,已在较新内核中被移除或废弃。