TcpTimedWaitDelay/MaxUserPort

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

netstat -ano>>c:\port.txt

netstat -n | find /C /I "established"
查看连接与内存
ss -s && free -g

本地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)

TcpTimedWaitDelay 描述:
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/TCPIP/Parameters
确定 TCP/IP 可释放已关闭连接并重用其资源前,必须经过的时间。关闭和释放之间的此时间间隔通称 TIME_WAIT 状态或两倍最大段生命周期(2MSL)状态。
此时间期间,重新打开到客户机和服务器的连接的成本少于建立新连接。
减少此条目的值允许 TCP/IP 更快地释放已关闭的连接,为新连接提供更多资源。
如果运行的应用程序需要快速释放和创建新连接,而且由于 TIME_WAIT 中存在很多连接,导致低吞吐量,则调整此参数。

参考:https://technet.microsoft.com/en-us/library/cc938217.aspx
TYPE:    REG_DWORD   
VALUE:    0x1E 0x12C ( 30–300 seconds )
DEFAULT:    0xF0 ( 240 seconds = 4 minutes )

将此值设置为十进制 30,其为十六进制 0x0000001e。该值将等待时间设置为 30 秒。
建议值:最小值为 0x1E,它将等待时间设置为 30 秒。

MaxUserPort 描述:
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/TCPIP/Parameters
TYPE:    REG_DWORD   
VALUE:    5,000–65,534 ( port number )
DEFAULT:    5000

确定在应用程序从系统请求可用用户端口时,TCP/IP 可指定的最高端口号。
缺省值:无 建议值:至少十进制 32768。

参考:https://technet.microsoft.com/en-us/library/cc938196.aspx

注意: 如果调整 MaxUserPort 或 TcpTimedWaitDelay 设置,您必须重新启动 Microsoft Windows 以使新设置生效。

使用 Exchange Server 2007 :
建议将 MaxUserPort 值设置为 60000。
如果设置的 MaxUserPort 值低于 60000,服务器可能会显示名称服务提供程序接口 (NSPI) 代理警告,例如事件 9040。

描述:

http://longwhiteclouds.com/2012/03/22/1-million-iops-microsoft-vs-vmware-comparison/

 

Links:

http://www.xiaobo.li/network/572.html

 

此条目发表在network分类目录。将固定链接加入收藏夹。