centos系统大量time wait占用的解决

centos系统大量time wait占用的解决统计在一台前端机上高峰时间TCP连接的情况,统计命令:netstat-n|awk’/^tcp/{++S[$NF]}END{for(ainS)printa,S[a]}’除了ESTABLISHED,可以看到连接数比较多的几个状态是:FIN_WAIT1,TIME_WAIT,CLOSE_WAIT,SYN_RECV和…

大家好,又见面了,我是你们的朋友全栈君。

统计在一台前端机上高峰时间TCP连接的情况,统计命令:
netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’

除了ESTABLISHED,可以看到连接数比较多的几个状态是:FIN_WAIT1, TIME_WAIT, CLOSE_WAIT, SYN_RECV和LAST_ACK;下面的文章就这几个状态的产生条件、对系统的影响以及处理方式进行简单描述。

发现存在大量TIME_WAIT状态的连接
tcp 0 0 127.0.0.1:3306 127.0.0.1:41378 TIME_WAIT
tcp 0 0 127.0.0.1:3306 127.0.0.1:41379 TIME_WAIT
tcp 0 0 127.0.0.1:3306 127.0.0.1:39352 TIME_WAIT
tcp 0 0 127.0.0.1:3306 127.0.0.1:39350 TIME_WAIT
tcp 0 0 127.0.0.1:3306 127.0.0.1:35763 TIME_WAIT
tcp 0 0 127.0.0.1:3306 127.0.0.1:39372 TIME_WAIT
tcp 0 0 127.0.0.1:3306 127.0.0.1:39373 TIME_WAIT
tcp 0 0 127.0.0.1:3306 127.0.0.1:41176 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时间

修改之后,再用命令查看TIME_WAIT连接数
netstat -ae|grep “TIME_WAIT” |wc –l

发现大量的TIME_WAIT 已不存在,mysql进程的占用率很快就降下来的,网站访问正常。
不过很多时候,出现大量的TIME_WAIT状态的连接,往往是因为网站程序代码中没有使用mysql.colse(),才导致大量的mysql 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的等待时间

http://kerry.blog.51cto.com/1…

修改之后,再用

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/141608.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 加壳工具简单使用

    加壳工具简单使用时间20210107,环境winxp介绍一些加壳工具和和它们的简单使用,为了方便描述,就先写了一个原程序,原程序的逻辑很简单,代码如下。1. #include<stdio.h>2. intmain()3. {4. inti=5;5. scanf(“%d”,&i);6. while(i–)7. {8. printf(“HelloWorld%d\n”,i);9. }

  • Elasticlunr.js 简单介绍

    Elasticlunr.js 简单介绍

  • linux 查看网络流量_linux 流量监控

    linux 查看网络流量_linux 流量监控可以使用iftop进行Linux机器的网络流量监控安装方法centos系统下第一步:安装EPEL源yuminstallepel-release第二部:安装iftopyuminstal

  • Linux入门命令_零基础自学吉他的步骤

    Linux入门命令_零基础自学吉他的步骤Linux入门基础命令教程linux用户识别查看文件与目录命令三级目录linux用户识别这里我就不详细介绍什么是linux,相比你来看文章的都知道什么是linux。linux用户分为两种,分别是管理员用户和普通用户,当我们登录linux的时候会看到如下图第一部分是用户名@demon是主机名/当前所在路径root是管理员用户demon是普通用户可以看到他们的区别在于最后的字符,#是管理员用户的意思,$是普通用户的意思。查看文件与目录命令1.pwd查看当前所在的目录如图

    2022年10月10日
  • 一句代码计算阶乘(python)

    一句代码计算阶乘(python)printreduce(lambdaa,b:a*b,range(1,1001))Reurns:4023872600770937735437024339230039857193748642

  • php 递归[通俗易懂]

    php 递归[通俗易懂]php 递归

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号