netstat -an查看到大量的TIME_WAIT狀態的解決辦法


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 

 

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters]
"TcpTimedWaitDelay"=dword:0000001e
"MaxUserPort"=dword:0000fffe

將上述注冊表內容保存為.reg文件,導入到注冊表即可。

也可以使用批處理腳本導入,將如下文本保存為.bat文件,執行即可。:

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%

regedit %t%

del %t% /s/q

 必須重新啟動 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=8192

 

參考:

https://www.cnblogs.com/tianzhiliang/articles/2400176.html

http://chembo.iteye.com/blog/1503770

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM