• 临时解决系统中大量的TIME_WAIT连接


    今天,偶然间发现后台服务与数据库之间有大量的TIME_WAIT的连接:

    [root@localhost logs]# netstat -an | grep TIME_WAIT
    tcp        0      0 a.a.a.a:54709       b.b.b.b:3306          TIME_WAIT   
    tcp        0      0 a.a.a.a:80          c.c.c.c:37811         TIME_WAIT   
    tcp        0      0 a.a.a.a:54700       b.b.b.b:3306          TIME_WAIT   
    tcp        0      0 a.a.a.a:54702       b.b.b.b:3306          TIME_WAIT   
    tcp        0      0 a.a.a.a:54693       b.b.b.b:3306          TIME_WAIT   
    tcp        0      0 a.a.a.a:54699       b.b.b.b:3306          TIME_WAIT   
    tcp        0      0 a.a.a.a:54711       b.b.b.b:3306          TIME_WAIT   
    tcp        0      0 a.a.a.a:54701       b.b.b.b:3306          TIME_WAIT   
    tcp        0      0 a.a.a.a:54712       b.b.b.b:3306          TIME_WAIT   
    tcp        0      0 a.a.a.a:54694       b.b.b.b:3306          TIME_WAIT   
    tcp        0      0 a.a.a.a:54692       b.b.b.b:3306          TIME_WAIT   
    tcp        0      0 a.a.a.a:54707       b.b.b.b:3306          TIME_WAIT   
    tcp        0      0 a.a.a.a:54703       b.b.b.b:3306          TIME_WAIT   
    tcp        0      0 a.a.a.a:54708       b.b.b.b:3306          TIME_WAIT   
    tcp        0      0 a.a.a.a:54697       b.b.b.b:3306          TIME_WAIT   
    tcp        0      0 a.a.a.a:54696       b.b.b.b:3306          TIME_WAIT   
    tcp        0      0 a.a.a.a:54705       b.b.b.b:3306          TIME_WAIT   
    tcp        0      0 a.a.a.a:54698       b.b.b.b:3306          TIME_WAIT   
    tcp        0      0 a.a.a.a:54704       b.b.b.b:3306          TIME_WAIT   
    tcp        0      0 a.a.a.a:54695       b.b.b.b:3306          TIME_WAIT   
    tcp        0      0 a.a.a.a:54706       b.b.b.b:3306          TIME_WAIT   
    tcp        0      0 a.a.a.a:54713       b.b.b.b:3306          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 时间
     
    修改后,再次查看:
    [root@rj-01 logs]# netstat -an | grep 3306
    tcp        0      0 a.a.a.a:44396       b.b.b.b:3306          ESTABLISHED 
    tcp        0      0 a.a.a.a:44667       b.b.b.b:3306          ESTABLISHED 
    tcp        0      0 a.a.a.a:44665       b.b.b.b:3306          ESTABLISHED 
    tcp        0      0 a.a.a.a:44666       b.b.b.b:3306          ESTABLISHED 
    tcp        0      0 a.a.a.a:44668       b.b.b.b:3306          ESTABLISHED 
    tcp        0      0 a.a.a.a:44664       b.b.b.b:3306          ESTABLISHED 
    tcp        0      0 a.a.a.a:44397       b.b.b.b:3306          ESTABLISHED 

    发现之间到数据库的TIME_WAIT连接不存在了。

    PS:尽管可以解决TIME_WAIT问题,但是这里建议还是需要找到产生TIME_WAIT的本质原因,比如应用系统中哪里忘记调用close方法等。

  • 相关阅读:
    layui的模块化和非模块化使用
    layui实现类似于bootstrap的模态框功能
    ajax下载文件
    【IDEA】IDEA中maven项目pom.xml依赖不生效解决
    主-主数据库系统架构
    MyEclipse x.x各版本终极优化配置指南
    Cactus入门
    有史以来最出彩的编程语言名字
    安卓开发20:动画之Animation 详细使用-主要通过java代码实现动画效果
    第一次讲课总结
  • 原文地址:https://www.cnblogs.com/CasonChan/p/5531827.html
Copyright © 2020-2023  润新知