原文地址: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建站的朋友請務必重視起來。