开发者社区> 问答> 正文

如何解决time_wait?

如何解决time_wait?

展开
收起
令人无语的八阿哥 2021-10-12 17:24:04 545 0
1 条回答
写回答
取消 提交回答
  • 1) 最佳方案是应用改造长连接,但是一般不太适用。

    2) 修改系统回收参数。

    设置以下参数。

    image.png

    如果这两个参数同时开启,会校验源ip过来的包携带的timestamp是否递增,如果不是递增的话,则会导致三次握手建联不成功,具体表现为抓包的时候看到syn 发出,server 端不响应 syn ack。

    通俗一些来讲就是,一个局域网有多个客户端访问您,如果有客户端的时间比别的客户端时间慢,就会建联不成功。

    治标不治本的方式:

    放大端口范围。

    sysctl net.ipv4.ip_local_port_range

    image.png

    放大 time_wait 的 buckets

    sysctl net.ipv4.tcp_max_tw_buckets

    image.png

    关于 net.ipv4.tcp_max_tw_buckets 到底要不要放大,目前云上 ecs 多数是设置了5000,在很多场景下可能是不够的。

    image.png

    简单来说net.ipv4.tcp_max_tw_buckets 的作用是为了“优雅”的关闭连接。

    1. 完整的关闭连接。

    2. 避免有数据包重复。

    资料来源:电子书《ECS运维指南之Linux系统诊断》,下载链接:https://developer.aliyun.com/topic/download?id=143

    2021-10-12 17:47:40
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载