根據tcp協議的連線斷開規定,發起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不會受到之前殘留的延遲重發報文影響的機制,是必要的邏輯保證。
解決:發現系統存在大量time_wait狀態的連線,通過調整核心引數解決。
# vi /etc/sysctl.conf //加入以下內容,net.ipv4.tcp_syncookies預設就有,不需要再新增
# controls the use of tcp syncookies
net.ipv4.tcp_syncookies = 1
# the time-wait sockets for new connections can be reused
net.ipv4.tcp_tw_reuse = 1
# enable fast recycling of time-wait sockets status
net.ipv4.tcp_tw_recycle = 1
# decrease the time default value for tcp_fin_timeout connection
net.ipv4.tcp_fin_timeout = 30
然後執行 /sbin/sysctl -p 讓引數生效
/sbin/sysctl -p
附錄:
附錄1.linux引數說明
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 = 30 修改系統預設的timeout時間,改為30s。
附錄2.windows設定下time_wait等待時間引數說明
在hkey_local_machine\system\currentcontrolset\services\tcpip\parameters,新增名為tcptimedwaitdelay的
dword鍵,設定為30,最短30秒,以縮短time_wait的等待時間。
linux下解決大量的TIME WAIT
root web02 vi etc sysctl.conf 新增如下內容 net.ipv4.tcp tw reuse 1 net.ipv4.tcp tw recycle 1 net.ipv4.tcp syncookies 1 使核心引數生效 root web02 sysctl p readme ne...
大量的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...
linux下解決大量的TIME WAIT
root web02 vi etc sysctl.conf 新增如下內容 net.ipv4.tcp tw reuse 1 net.ipv4.tcp tw recycle 1 net.ipv4.tcp syncookies 1 使核心引數生效 root web02 sysctl p readme ne...