开发者社区 问答 正文

Linux服务器进行性能优化中,如何解 TIME_WAIT 问题?

Linux服务器进行性能优化中,如何解 TIME_WAIT 问题?

展开
收起
我是小美女 2021-11-04 14:27:25 1184 分享 版权
1 条回答
写回答
取消 提交回答
  • 网络规划设计师、敏捷专家、CISP、ITSS服务经理、ACA全科目、ACP4项、ACE、CBP、CDSP、CZTP等。拥有 PRINCE2 Foundation/Practitioner、CCSK、ITIL、ISO27001、PMP等多项国际认证。 专利5+、期刊10+、知识产权师。核心期刊审稿人。

    您好,TCP 状态迁移过程中可以看到,主动关闭的一方会进入 TIME_WAIT 状态(而被动关闭的一方会进入 CLOSE_WAIT 状态)。TIME_WAIT 状态保持的时间为 2MSL,即 60 秒。TIME_WAIT 状态之所以存在是为了解决网络中的异常问题,比如

    网络存在延迟和重传,前一个连接的延迟数据包可能被新的连接错误接收。
    关闭连接时最后的 ACK 可能会丢失重传,这会干扰新的连接(即重复发送的 FIN 包会关闭新的连接)。
    
    

    TIME_WAIT 连接数量多了以后,会导致三个危害:

    占用内存
    占用端口号
    占用连接跟踪表
    
    

    解决方法

    增大 net.ipv4.tcp_max_tw_buckets 和 net.netfilter.nf_conntrack_max。
    减小 net.ipv4.tcp_fin_timeout 和 net.netfilter.nf_conntrack_tcp_timeout_time_wait ,让系统尽快释放资源。
    开启端口复用 net.ipv4.tcp_tw_reuse。这样,被 TIME_WAIT 状态占用的端口,还能用到新建的连接中。
    增大本地端口的范围 net.ipv4.ip_local_port_range 。
    增加最大文件描述符的数量。你可以使用 fs.nr_open 和 fs.file-max。
    
    
    2021-11-04 14:41:01
    赞同 1 展开评论