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

相關文章
相關標籤/搜索