TIME WAIT解決辦法

2021-08-30 22:38:12 字數 3561 閱讀 5967

伺服器(windows)檢視了下系統程序,

netstat -an

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的等待時間

伺服器(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

發現系統存在大量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

mysql 大量time wait 解決辦法

伺服器 windows 發現很卡,於是重啟了下伺服器,進入系統後,沒過一會問題依舊,檢視了下系統程序,發現mysql佔用率達到99 可以肯定的是mysql連線出現問題 netstat an 192.168.12.13 3306 192.168.12.12 30443 time wait 192.16...

大量的TIME WAIT解決辦法

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...

解決TIME WAIT狀態常見的解決辦法

time wait狀態 伺服器中保持大量的time wait是很不好的事情,它可能會導致伺服器暫時處理不了新的鏈結,作業系統中提供的檔案描述符是在一定數量的,多出來的請求連線,是無法分配的。在linux下使用下面的命令可以檢視當時系統中所維持的tcp狀態資訊。netstat n awk tcp en...