TCP/IP 選項TcpTimedWaitDelay設(shè)置
當(dāng)TCP連接被關(guān)閉時,{ Protocol, Local IP, Local Port, Remote IP, Remote Port}五元組就進入TIME_WAIT狀態(tài),默認(rèn)時間是4分鐘??梢酝ㄟ^一組命令看看tcp的連接狀態(tài):
netstat -ano>>c:\port.txt
本地ip,遠(yuǎn)程ip,遠(yuǎn)程端口都是固定的,只有本地端口是變化的,本地端口只能使用1024-5000,因此如果在4分鐘內(nèi)發(fā)起了大約4000個連接,這時就會發(fā)生異常,下面是使用WCF,客戶端的異常:
System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted 192.168.101.5:8888
at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.Sockets.Socket.Connect(EndPoint remoteEP)
at System.ServiceModel.Channels.SocketConnectionInitiator.Connect(Uri uri, TimeSpan timeout)
TCP有個選項 TcpTimedWaitDelay:
確定 TCP/IP 可釋放已關(guān)閉連接并重用其資源前,必須經(jīng)過的時間。關(guān)閉和釋放之間的此時間間隔通稱 TIME_WAIT 狀態(tài)或兩倍最大段生命周期(2MSL)狀態(tài)。此時間期間,重新打開到客戶機和服務(wù)器的連接的成本少于建立新連接。減少此條目的值允許 TCP/IP 更快地釋放已關(guān)閉的連接,為新連接提供更多資源。如果運行的應(yīng)用程序需要快速釋放和創(chuàng)建新連接,而且由于 TIME_WAIT 中存在很多連接,導(dǎo)致低吞吐量,則調(diào)整此參數(shù)。
Exchange Server 2007 服務(wù)器的缺省值是60,http://technet.microsoft.com/zh-cn/library/bb397379.aspx
-
打開注冊表編輯器,如 Regedit.exe 或 Regedt32.exe。
-
導(dǎo)航到:HKLM\System\CurrentControlSet\Services\Tcpip\Parameters
-
雙擊 TcpTimedWaitDelay,然后將“數(shù)值數(shù)據(jù)”字段設(shè)置為 60(十進制)。
-
關(guān)閉注冊表編輯器,然后重新啟動計算機。
MaxUserPort
描述:
確定在應(yīng)用程序從系統(tǒng)請求可用用戶端口時,TCP/IP 可指定的最高端口號。
如何查看或設(shè)置:
使用 regedit 命令訪問 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Services\TCPIP\Parameters 注冊表子鍵并創(chuàng)建名為 MaxUserPort 的新 REG_DWORD 值。停止并重新啟動系統(tǒng)。
注:當(dāng)在 Windows NT 或 Windows 2000 操作系統(tǒng)上調(diào)整 erver 時,同時使用這兩個參數(shù)。