`
rq2_79
  • 浏览: 239016 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

发现大量的TIME_WAIT解决办法

阅读更多
 netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a,S[a]}'
 
服务器(windows),发现很卡,于是重启了下服务器,进入系统后,没过一会问题依旧,查看了下系统进程,发现mysql占用率达到99%,可以肯定的是mysql连接出现问题:
netstat -an
192.168.12.13:3306      192.168.12.12:30443      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30444      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30445      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30446      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30447      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30448      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30449      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30450      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30451      TIME_WAIT
192.168.12.13:3306      192.168.12.12:30452      TIME_WAIT
... ...
      根据TCP协议定义的3次握手断开连接规定,发起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不会受到之前残留的延迟重发报文影响的机制,是必要的逻辑保证.
      在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters,添加名为TcpTimedWaitDelay的
DWORD键,设置为60,以缩短TIME_WAIT的等待时间
 
登陆到web服务器(linux):
    
     netstat -ae |grep mysql
     tcp        0      0 aaaa:53045               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53044               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53051               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53050               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53049               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53048               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53055               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53054               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53053               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53052               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53059               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53058               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53057               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53056               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53063               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53062               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53061               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53060               192.168.12.3:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53067               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53066               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53065               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53064               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa53071               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53070               192.168.12.13:mysql           TIME_WAIT   root       0
tcp        0      0 aaaa:53069               192.168.12.13:mysql           TIME_WAIT   root       0
发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决,
vi /etc/sysctl.conf

编辑文件,加入以下内容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
 
然后执行 /sbin/sysctl -p 让参数生效。
 
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 修改系統默认的 TIMEOUT 时间
 
修改之后,再用
netstat -ae|grep mysql
tcp        0      0 aaaa:50408               192.168.12.13:mysql           ESTABLISHED nobody     3224651
tcp        0      0 aaaa:50417               192.168.12.13:mysql           ESTABLISHED nobody     3224673
tcp        0      0 aaaa:50419               192.168.12.13:mysql           ESTABLISHED nobody     3224675

       发现大量的TIME_WAIT 已不存在,mysql进程的占用率很快就降下来的,各网站访问正常!!
       以上只是暂时的解决方法,最后仔细巡查发现是前天新上线的一个系统,程序代码中没有使用mysql.colse(),才导致大量的mysql  TIME_WAIT 
分享到:
评论

相关推荐

    解决mysql出现大量TIME_WAIT

    - `net.ipv4.tcp_fin_timeout=30`:缩短TIME_WAIT状态的持续时间,单位为秒。 2. **使配置生效**:执行`sysctl -p`命令,使修改后的参数立即生效。 ### 三、优化MySQL配置 除了系统层面的优化,对MySQL数据库...

    CentOS解决服务器存在大量time_wait的问题

    本文主要探讨了如何解决CentOS服务器上存在的大量TIME_WAIT TCP连接问题,这可能导致服务器连接数过多,进而引起服务假死。当服务器之间的通信过于频繁,如通过REST请求互相调用时,Java服务器可能无法及时回收TCP...

    服务器大量TIME_WAIT解决方法

    3. 使用 `netstat -an` 命令查看服务器的网络连接状态,发现大量的 TIME_WAIT 状态已经不存在了。 总结 在 Linux 服务器中,TIME_WAIT 状态是一种正常的网络连接状态。然而,出现大量的 TIME_WAIT 状态可能会对...

    大量TIME_WAIT状态的连接解决方法

    ### 大量TIME_WAIT状态的连接解决方法 在Linux系统中,当服务器处理大量网络连接时,可能会遇到TIME_WAIT状态的连接过多导致的问题。TIME_WAIT是TCP连接的一个正常终止状态,但若数量过多则可能会影响到服务器性能...

    nginx+php产生大量TIME_WAIT连接解决办法1

    4. `net.ipv4.tcp_fin_timeout = 30`:设置FIN_WAIT-2状态的持续时间,减少等待时间。 5. `net.ipv4.tcp_keepalive_time = 1200`:调整TCP空闲连接检查的频率,防止死连接占用资源。 6. `...

    关于释放time_wait连接多的方案

    TCP_FIN_TIMEOUT参数定义了TIME_WAIT状态的持续时间,默认为60秒。将其缩短至30秒可以更快地释放TIME_WAIT状态的连接,但这也意味着任何潜在的网络延迟数据包可能在新连接建立前被丢弃,因此需谨慎调整。 ### 5. ...

    解决TIME_WAIT过多造成的问题

    解决TIME_WAIT过多造成的问题

    [线上问题] “服务端长连接与客户端短连接引起Nginx产生大量\"TIME_WAIT\"状态的线程”的问题分析解决

    本文讨论了在线上环境中,服务端长连接和客户端短连接配置不当导致Nginx服务器产生大量“TIME_WAIT”状态线程的问题,同时提供了问题的分析和解决方法。本文主要涉及的网络编程知识点包括长连接与短连接的定义和区别...

    TCP状态迁移,CLOSE_WAIT & FIN_WAIT2 的问题解决

    在 TCP 连接中,客户端和服务器端都可以处于不同的状态,例如 ESTABLISHED、CLOSE_WAIT、FIN_WAIT_1、FIN_WAIT_2、TIME_WAIT 等 trạng thái。 CLOSE_WAIT 状态是 TCP 连接中的一种状态,它表示服务器端已经收到了...

    解决TIME_WAIT过多造成的问题1

    "解决TIME_WAIT过多造成的问题1" TIME_WAIT状态是TCP连接的四次挥手关闭协议中的一个重要状态,它存在的理由是为了确保TCP全双工连接的正常终止和避免老的重复分节在网络中消逝。 在TIME_WAIT状态中,客户端必须...

    【Linux网络编程笔记】TCP短连接产生大量TIME_WAIT导致无法对外建立新TCP连接的原因及解决方法—实践篇 - slv

    【Linux网络编程笔记】TCP短连接产生大量TIME_WAIT导致无法对外建立新TCP连接的原因及解决方法,这是一个关于网络编程和Linux系统配置的问题。在TCP/IP通信中,TIME_WAIT状态是TCP连接生命周期的一部分,用于确保...

    CLOSE_WAIT网络连接无法释放问题解决

    CLOSE_WAIT网络连接无法释放问题解决 CLOSE_WAIT是一个常见的TCP连接状态,指的是服务器端的连接在客户端关闭后还未释放的情况。这种情况经常出现于客户端主动断开连接,但服务器端没有正确关闭连接的情况下。这种...

    windows 2008 R2解决socket连接不释放补丁包_time-wait过多注册表改.rar

    windows 2008 R2解决socket连接不释放补丁包_time-wait过多注册表修改, Windows time_wait过多解决办法解决办法: 修改注册表中的tcpip的TIMEWAIT回收时间属性值,需要重启后生效 在HKEY_LOCAL_MACHINE\SYSTEM...

    netstat显示 TIME-WAIT 的原因及解决办法

    例如,在Linux系统中,可以通过`/etc/sysctl.conf`配置文件调整`net.ipv4.tcp_fin_timeout`和`net.ipv4.tcp_tw_reuse`等参数。 2. **优化应用设计**:减少不必要的连接创建和关闭,例如通过使用连接池来复用TCP连接...

    系统调优,你所不知道的TIME_WAIT和CLOSE_WAIT1

    大量的TIME_WAIT连接会使可用的TCP端口资源耗尽,从而限制了新的连接建立。这也是为什么有些人会建议调整sysctl.conf中的tcp_tw_reuse和tcp_tw_recycle参数,试图复用TIME_WAIT连接或快速回收它们。 然而,直接调整...

    linux内核协议栈TCP time_wait原理、优化、副作用1

    在Cobar测试中,使用sysbench.short进行压力测试,发现即使在默认配置下,服务端的大量time_wait状态也会导致资源占用,影响性能。 综上所述,理解并优化Linux内核协议栈中的TCP time_wait状态是至关重要的,特别是...

    减少Linux服务器过多的TIME_WAIT

    4. **缩短TCP FIN_TIMEOUT**:设置`net.ipv4.tcp_fin_timeout = 30`,将FIN_TIMEOUT设置为30秒,使得关闭过程更快。 请注意,`tcp_tw_recycle`参数在某些现代Linux内核中可能已被废弃,因为快速回收可能导致连接...

Global site tag (gtag.js) - Google Analytics