netstat下time_wait狀態的tcp鏈接:
1.這是一種處於鏈接徹底關閉狀態前的狀態;
2.一般要等上4分鐘(windows server)的時間才能徹底關閉;
3.這種狀態下的tcp鏈接佔用句柄與端口等資源,服務器也要爲維護這些鏈接狀態消耗資源;
4.解決這種time_wait的tcp鏈接只有讓服務器可以快速回收和重用那些TIME_WAIT的資源:修改註冊表[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters]添加dword值TcpTimedWaitDelay=30(30秒也爲微軟建議值;默認爲2分鐘)和MaxUserPort:65534(可選值5000 - 65534);
5.具體tcpip鏈接參數配置還可參照這裏:http://technet.microsoft.com/zh-tw/library/cc776295%28v=ws.10%29.aspx html
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters] "TcpTimedWaitDelay"=dword:0000001e "MaxUserPort"=dword:0000fffe
將上述註冊表內容保存爲.reg文件,導入到註冊表便可。linux
也能夠使用批處理腳本導入,將以下文本保存爲.bat文件,執行便可。:web
cd /d %~dp0
set t="%~dp0tmp.reg"
echo Windows Registry Editor Version 5.00>%t%
echo. >>%t%
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters]>>%t%
echo "TcpTimedWaitDelay"==dword:0000001e>>%t%
echo "MaxUserPort"=dword:0000fffe>>%t%
rem 如下兩行是從註冊表中刪除對應的配置
rem echo "TcpTimedWaitDelay"=->>%t%
rem echo "MaxUserPort"=->>%t%windows
regedit %t% 服務器
del %t% /s/qcookie
必須從新啓動 Microsoft Windows 以使新設置生效併發
6.linux下:
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:
net.ipv4.tcp_syncookies=1 打開TIME-WAIT套接字重用功能,對於存在大量鏈接的Web服務器很是有效。
net.ipv4.tcp_tw_recyle=1
net.ipv4.tcp_tw_reuse=1 減小處於FIN-WAIT-2鏈接狀態的時間,使系統能夠處理更多的鏈接。
net.ipv4.tcp_fin_timeout=30 減小TCP KeepAlive鏈接偵測的時間,使系統能夠處理更多的鏈接。
net.ipv4.tcp_keepalive_time=1800 增長TCP SYN隊列長度,使系統能夠處理更多的併發鏈接。
net.ipv4.tcp_max_syn_backlog=8192tcp
參考:spa
https://www.cnblogs.com/tianzhiliang/articles/2400176.htmlcode