美文网首页Linux
net.ipv4.tcp_max_tw_buckets 配置说明

net.ipv4.tcp_max_tw_buckets 配置说明

作者: ZhiXiong | 来源:发表于2019-05-20 00:00 被阅读0次

    因为前些天遇到大量 TIME_WAIT 导致端口耗尽服务异常的情况,让我注意到这个参数。
    先说它的作用:在 TIME_WAIT 数量等于 tcp_max_tw_buckets 时,不会有新的 TIME_WAIT 产生。

    tcp_max_tw_buckets 应该如何配置

    如果不是类似 Nginx 之类的中间代理(即不担心端口耗尽),你通常不用关心这个值,使用官方默认的就好,甚至官方建议在内存大的情况下可以增加这个值。

    类似 Nginx 之类的中间代理一定要关注这个值,因为它对你的系统起到一个保护的作用,一旦端口全部被占用,服务就异常了。 tcp_max_tw_buckets 能帮你降低这种情况的发生概率,争取补救时间。

    这个值可能有什么不好的影响

    在完全下面 3 条完全满足的情况下

    1. 当前服务器主动关闭连接
    2. 当前服务器 TIME_WAIT 数等于或大于 tcp_max_tw_buckets
    3. 对端服务器发完最后一个 Fin 包,没有收到当前服务器返回最后一个 Ack,又重发了 Fin 包

    因为新的 TimeWait 没有办法创建 ,这个连接在当前服务器上就消失了,对端服务器将会收到一个 Reset 包。因为这个连接是明确要关闭的,所以收到一个 Reset 也不会有什么大问题。(但是违反了 TCP/IP 协议)

    建议

    综合收益与成本,以下给出我的建议:
    在只有 60000 多个端口可用的情况下,配置为

    net.ipv4.tcp_max_tw_buckets = 50000
    

    (在尽可能不违反 TCP/IP 协议的情况下保证系统的可用性)

    参考文档

    https://yq.aliyun.com/articles/2519?spm=a2c4e.11163080.searchblog.9.77852ec15TOj6z
    官方文档: https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt

    相关文章

      网友评论

        本文标题:net.ipv4.tcp_max_tw_buckets 配置说明

        本文链接:https://www.haomeiwen.com/subject/poeczqtx.html