linux服务器出现大量TIME_WAIT的解决方法

原文地址:http://www.frontopen.com/1219.htmlhtml

linux服务器出现大量TIME_WAIT的解决方法
今天忽然发现博客的访问速度变得缓慢,反复查找缘由,发现服务器存在大量的TIME_WAIT链接。mysql

经过netstat -an | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’命令进行查询,反馈结果为:linux

TIME_WAIT 236
ESTABLISHED 13
LISTEN 11sql

显然TIME_WAIT 的数量过于异常。服务器

经过编辑配置文件,调整内核参数解决问题。cookie

使用命令:vi /etc/sysctl.confsocket

编辑文件,加入如下内容:
net.ipv4.tcp_syncookies = 1 (某些状况下该参数已启用)
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30tcp

而后执行/sbin/sysctl -p让参数生效。ide

net.ipv4.tcp_syncookies = 1表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少许SYN***,默认为0,表示关闭;wordpress

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。

若是你的服务器是Windows平台,能够修改下面的注册表键值:
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters]
“TcpTimedWaitDelay”=dword:0000001e

通常状况下,使用虚拟空间的用户不太须要担忧此类问题,若是是使用VPS的用户,建议按照此类方法进行排查和设置,能够有效的提高mysql服务的查询速度。对于wordpress这种程序尤其重要,若是是使用wordpress建站的朋友请务必重视起来。

相关文章
相关标签/搜索