启用TCP连接复用需开启tcp_tw_reuse=1和tcp_timestamps=1,并调优fin_timeout、backlog、keepalive参数及本地端口范围,以缓解TIME_WAIT堆积、队列积压、空闲连接占用和端口耗尽问题。

启用 TCP 连接复用:开启 TIME_WAIT 复用
当大量短连接快速建立又关闭时,会堆积大量处于 TIME_WAIT 状态的 socket,占用端口和内存。Linux 默认禁止复用这些连接,但可通过内核参数安全启用:
- net.ipv4.tcp_tw_reuse = 1:允许将处于 TIME_WAIT 的 socket 重新用于新连接(仅客户端有效,且需时间戳支持)
- net.ipv4.tcp_timestamps = 1:必须开启,用于防止序列号回绕,是 tcp_tw_reuse 的前提
- net.ipv4.tcp_fin_timeout = 30:缩短 FIN_WAIT_2 超时时间(默认 60),加快连接释放
合理调整连接队列与 backlog
服务端 accept 队列积压会导致连接被丢弃或重传,尤其在突发流量下。需协同调优应用层与内核参数:
- 应用 listen() 时设置合理的 backlog 值(如 4096 或更高),避免被内核截断
- net.core.somaxconn = 65535:扩大全连接队列上限(需 ≥ 应用 backlog)
- net.core.netdev_max_backlog = 5000:提升网卡中断后数据包排队能力,缓解瞬时冲击
优化 keepalive 行为减少空闲连接开销
长连接虽省握手开销,但空闲连接持续占用资源。通过精细控制 keepalive 可平衡复用率与资源释放:
- net.ipv4.tcp_keepalive_time = 600:连接空闲 10 分钟后开始探测(可按业务下调至 300)
- net.ipv4.tcp_keepalive_intvl = 30:每次探测间隔 30 秒
- net.ipv4.tcp_keepalive_probes = 3:连续 3 次无响应则关闭连接
- 应用层建议配合 HTTP/1.1 的 Connection: keep-alive 与 max-age 控制复用生命周期
避免端口耗尽:扩展本地端口范围
作为客户端频繁发起连接(如微服务调用、反向代理)时,可用端口不足会直接限制并发能力:
- net.ipv4.ip_local_port_range = 1024 65535:扩大临时端口范围(默认 32768–65535)
- net.ipv4.ip_local_reserved_ports = 8080,9000-9005:预留关键端口,防止被自动分配
- 若使用 NAT 或负载均衡器,可考虑启用 net.ipv4.ip_nonlocal_bind = 1(谨慎使用,仅限特定场景)










