zoukankan      html  css  js  c++  java
  • 大量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的等待时间。

  • 相关阅读:
    apache开源项目 -- Wicket
    读书笔记--《机器人时代》
    apache开源项目--dbutils
    apache开源项目--mina
    apache开源项目--OpenMeetings
    apache开源项目--lume
    apache开源项目--Sirona
    shared_ptr的简单实现
    高并发网络编程之epoll详解
    最长公共子序列|最长公共子串|最长重复子串|最长不重复子串|最长回文子串|最长递增子序列|最大子数组和
  • 原文地址:https://www.cnblogs.com/itplay/p/11371651.html
Copyright © 2011-2022 走看看