• 大量TIME_WAIT连接的解决办法


    1、使用keep alive连接(待补充)

    2、修改tcp参数

    根据TCP协议的连接断开规定,发起socket主动关闭的一方,socket将进入TIME_WAIT状态,TIME_WAIT状态将持续2个MSL(Max Segment Lifetime),在Windows下默认为4分钟,即240秒,TIME_WAIT状态下的socket不能被回收使用。具体现象是对于一个处理大量短连接的服务器,如果是由服务器主动关闭客户端的连接,将导致服务器端存在大量的处于TIME_WAIT状态的socket, 甚至比处于Established状态下的socket多的多,严重影响服务器的处理能力,甚至耗尽可用的socket,停止服务。TIME_WAIT是TCP协议用以保证被重新分配的socket不会受到之前残留的延迟重发报文影响的机制,是必要的逻辑保证。

    解决:发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决。

    # vi /etc/sysctl.conf  //加入以下内容,net.ipv4.tcp_syncookies默认就有,不需要再添加
    # Controls the use of TCP syncookies
    net.ipv4.tcp_syncookies = 1
    
    # The TIME-WAIT sockets for new connections can be reused
    net.ipv4.tcp_tw_reuse = 1
    
    # Enable fast recycling of TIME-WAIT sockets status
    net.ipv4.tcp_tw_recycle = 1
    
    # Decrease the time default value for tcp_fin_timeout connection
    net.ipv4.tcp_fin_timeout = 30
    

      

    然后执行 /sbin/sysctl -p 让参数生效

    /sbin/sysctl -p
    

      

    附录1.Linux参数说明
    net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies来处理可防范少量SYN攻击,默认为0表示关闭。
    net.ipv4.tcp_tw_reuse = 1 表示开启重用,允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭。
    net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
    net.ipv4.tcp_fin_timeout = 30 修改系統默认的TIMEOUT时间,改为30s。

    附录2.Windows设置下TIME_WAIT等待时间参数说明
    在HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters,添加名为TcpTimedWaitDelay的
    DWORD键,设置为30,最短30秒,以缩短TIME_WAIT的等待时间。

  • 相关阅读:
    文件的上传
    扩展HTTP管道
    发布开源框架iOS矢量图形框架 TouchVG
    批量修改文件名的py脚本
    《矢量绘图基础》PPT
    开题了《面向移动设备的交互式图形平台设计与实现》
    计算几何(转)
    批量替换文件名和内容的Python脚本
    iOS上的二维绘图软件现状
    基本图形手绘图形算法包
  • 原文地址:https://www.cnblogs.com/itplay/p/11371651.html
Copyright © 2020-2023  润新知