windows平台
netstat -an netstat -an | find "1433"
192.168.12.13:3306 192.168.12.12:30443 time_wait
192.168.12.13:3306 192.168.12.12:30444 time_wait
192.168.12.13:3306 192.168.12.12:30445 time_wait
192.168.12.13:3306 192.168.12.12:30446 time_wait
192.168.12.13:3306 192.168.12.12:30447 time_wait
192.168.12.13:3306 192.168.12.12:30448 time_wait
192.168.12.13:3306 192.168.12.12:30449 time_wait
192.168.12.13:3306 192.168.12.12:30450 time_wait
192.168.12.13:3306 192.168.12.12:30451 time_wait
192.168.12.13:3306 192.168.12.12:30452 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的等待時間
登陸到web伺服器(linux):
netstat -ae |grep mysql
tcp 0 0 aaaa:53045 192.168.12.13:mysql time_wait root 0
tcp 0 0 aaaa:53044 192.168.12.13:mysql time_wait root 0
tcp 0 0 aaaa:53051 192.168.12.13:mysql time_wait root 0
tcp 0 0 aaaa:53050 192.168.12.13:mysql time_wait root 0
tcp 0 0 aaaa:53049 192.168.12.13:mysql time_wait root 0
tcp 0 0 aaaa:53048 192.168.12.13:mysql time_wait root 0
tcp 0 0 aaaa:53055 192.168.12.13:mysql time_wait root 0
tcp 0 0 aaaa:53054 192.168.12.13:mysql time_wait root 0
tcp 0 0 aaaa:53053 192.168.12.13:mysql time_wait root 0
tcp 0 0 aaaa:53052 192.168.12.13:mysql time_wait root 0
tcp 0 0 aaaa:53059 192.168.12.13:mysql time_wait root 0
tcp 0 0 aaaa:53058 192.168.12.13:mysql time_wait root 0
tcp 0 0 aaaa:53057 192.168.12.13:mysql time_wait root 0
tcp 0 0 aaaa:53056 192.168.12.13:mysql time_wait root 0
tcp 0 0 aaaa:53063 192.168.12.13:mysql time_wait root 0
tcp 0 0 aaaa:53062 192.168.12.13:mysql time_wait root 0
tcp 0 0 aaaa:53061 192.168.12.13:mysql time_wait root 0
tcp 0 0 aaaa:53060 192.168.12.3:mysql time_wait root 0
tcp 0 0 aaaa:53067 192.168.12.13:mysql time_wait root 0
tcp 0 0 aaaa:53066 192.168.12.13:mysql time_wait root 0
tcp 0 0 aaaa:53065 192.168.12.13:mysql time_wait root 0
tcp 0 0 aaaa:53064 192.168.12.13:mysql time_wait root 0
tcp 0 0 aaaa53071 192.168.12.13:mysql time_wait root 0
tcp 0 0 aaaa:53070 192.168.12.13:mysql time_wait root 0
tcp 0 0 aaaa:53069 192.168.12.13:mysql time_wait root 0
linux平台
發現系統存在大量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 時間
修改之後,再用
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
mysql 大量time wait 解決辦法
伺服器 windows 發現很卡,於是重啟了下伺服器,進入系統後,沒過一會問題依舊,檢視了下系統程序,發現mysql佔用率達到99 可以肯定的是mysql連線出現問題 netstat an 192.168.12.13 3306 192.168.12.12 30443 time wait 192.16...
linux 大量的TIME WAIT解決辦法
發現存在大量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....
linux 大量的TIME WAIT解決辦法
發現存在大量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....