Fork me on GitHub

TCP/IP 选项TcpTimedWaitDelay设置

当TCP连接被关闭时,{ Protocol, Local IP, Local Port, Remote IP, Remote Port}五元组就进入TIME_WAIT状态,默认时间是4分钟。可以通过一组命令看看tcp的连接状态:

netstat -ano>>c:\port.txt

本地ip,远程ip,远程端口都是固定的,只有本地端口是变化的,本地端口只能使用1024-5000,因此如果在4分钟内发起了大约4000个连接,这时就会发生异常,下面是使用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 可释放已关闭连接并重用其资源前,必须经过的时间。关闭和释放之间的此时间间隔通称 TIME_WAIT 状态或两倍最大段生命周期(2MSL)状态。此时间期间,重新打开到客户机和服务器的连接的成本少于建立新连接。减少此条目的值允许 TCP/IP 更快地释放已关闭的连接,为新连接提供更多资源。如果运行的应用程序需要快速释放和创建新连接,而且由于 TIME_WAIT 中存在很多连接,导致低吞吐量,则调整此参数。

Exchange Server 2007 服务器的缺省值是60,http://technet.microsoft.com/zh-cn/library/bb397379.aspx

 

  1. 打开注册表编辑器,如 Regedit.exe 或 Regedt32.exe。

  2. 导航到:HKLM\System\CurrentControlSet\Services\Tcpip\Parameters

  3. 双击 TcpTimedWaitDelay,然后将“数值数据” 字段设置为 60(十进制)。

  4. 关闭注册表编辑器,然后重新启动计算机。

MaxUserPort
描述:
确定在应用程序从系统请求可用用户端口时,TCP/IP 可指定的最高端口号。

如何查看或设置:
使用 regedit 命令访问 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Services\TCPIP\Parameters 注册表子键并创建名为 MaxUserPort 的新 REG_DWORD 值。停止并重新启动系统。

注:当在 Windows NT 或 Windows 2000 操作系统上调整 erver 时,同时使用这两个参数。

http://blogs.technet.com/tristank/archive/2008/03/11/maxuserport-what-it-is-what-it-does-when-it-s-important.aspx

posted @ 2008-12-19 13:09  张善友  阅读(16384)  评论(1编辑  收藏  举报