Window 2003 TCP


最近在开发程序过程中,原本好好运行好的程序,突然出现以下错误:

Net SqlClient Data Provider thrown System.Data.SqlClient.SqlException在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: TCP 提供程序, error: 0 - 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作。

错误很频繁,机器的CPU很高。

分析:

1、程序未进行改动。没有任何上线。

2、发现IIS链接数比之前增高。

 

分析是由于网站流量增大,增加IISweb园后,但是还是存在这样问题。

 

网上查询后,才知道,windows 2003对tcp的连接数做了限制,超多这个数目就会出现系统缓冲区空间不足或队列已满错误。

之后增加tcp链接数,修改注册表如下:

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "MaxUserPort" /d "65534" /t REG_DWORD /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "TcpTimedWaitDelay" /d "30" /t REG_DWORD /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "TcpNumConnections" /d "65534" /t REG_DWORD /f

原文出自【比特网】:http://server.chinabyte.com/475/2623975.shtml

Windows 提供了一些注册表参数的编辑方式来优化TCP/IP协议的性能。改变这些注册表值的时候,你应当了解它的作用,如果发现这些改变降

  低了服务器的性能,应该恢复成原有的设置。

  提示:本文描述的一些注册表值默认状态下可能不存在,需要手工添加。

  修改注册表需要有经验的技术人员完成,错误的注册表修改可能导致严重的系统不稳定或无法正常启动,在实施注册表的修改前,您应当完全了解注册表项目的作用以及可能造成的影响或副作用。建议访问微软网站或其它站点获得更多的与注册表参数修改相关的信息。

  很多注册表的改变在系统重启后才能生效,很多改变可能限制Windows的自我调优。

  注意:Windows TCP/IP调优可能对内存资源产生很大影响,实施调优的措施后监控内存资源的使用率是非常重要的。

  TCP 窗口大小

  TCP receive window(TCP 数据接收缓冲)定义了发送端在没有接收端确认信息的状态下可以发送的最大字节数。此数值越大,返回的确认信息就越少,相应的在发送端和接收端之间的通信就越好。此数值较小时可以降低发送端在等待接收端返回确认信息时发生超时的可能性,但这将增加网络流量,降低有效吞吐率。

  TCP在发送端和接收端之间动态调整一个最大段长度MSS(maximum segment size)的整数倍。MSS在连接刚刚开始建立时确定,由于receive window被调整为MSS的整数倍,在数据传输中完全长度的TCP数据段的使用增加,故而提高了网络吞吐率。

  默认状态下,TCP将试图依据MSS来优化window size,起始值为16KB,最大为64KB。TCP window size也可以在注册表中手工设定。

  TCP window size最大值通常为65535字节(64KB), 以太网最大段长度为1460字节,低于64KB的1460的最大整数倍为62420字节,故注册表中可以将62420设置为高带宽网络中适用的性能优化值。此值在注册表中原本没有,需要手工添加。

  TcpWindowSize注册表项的值可以被设定在global或每个interface级别,interface级别设置覆盖global值。为了达到最大window尺寸,我们建议此处设为global级别。

  注册表建议设置如下:

  

  大TCP窗口和RTT估测(时间戳)

  为了更高效地利用高带宽网络,你可以使用比前述TCP窗口大得多的TCP窗口大小,此特性是Windows 2000和Windows Server 2003中的新特性,称为TCP window scaling,它将以前的65535字节(64KB)的限制提高到了1073741824字节(1GB)。使用scaling window,系统可以允许确认信息间更大数据量的传输,增加了网络吞吐量及性能。

  发送端和接收端往返通信所需时间称为回环时间(RTT)。TCP有一个时间戳选项,通过更加频繁地计算来提高RTT值的估测值,此选项特别有助于估测更长距离的广域网上连接的RTT值,并更精确调整TCP转发超时时间。时间戳在TCP报头提供了两个区域,一个记录开始转发的时间,另一个记录接收到的时间。

  时间戳对于window scaling,即确认信息收到前的大数据包传送特别有用,激活时间戳仅仅在每个数据包的头中增加12字节,对网络流量的影响微乎其微。数据完整性与数据吞吐率最大化哪个更重要是个需要评估的问题。在某些环境中,象视频流传送,需要大的TCP窗口,这是第一重要的,而数据完整性排在第二位,在此中环境中,window scaling可以不打开时间戳。

  当发送端和接收端均激活window scaling和时间戳时,此特性才有效。

  初始时生成小的TCP窗口,之后窗口大小将按照内部算法增大。

  相关注册表如下:

  

  注意低位代表是否打开window scaling,高位代表是否打开时间戳。

  表4 TCP1323Opts注册表入口

  

  TCP1323Opts设置成激活TCP window scaling后,注册表项TCPWindowSize的值从65535字节变为1GB,为了达到最佳性能,这里的值最好设置成MSS的倍数。

  TCP 连接转发

  TCP退出前转发非确认连接请求(SYN)的次数记录在注册表项TcpMaxConnectRetransmisstions。对于每次尝试,转发超时是成功转发的两倍。在Windows Server 2003中默认超时次数是2,默认超时时间为3秒(在注册表项TCPInitialRTT中)。速度较慢的WAN连接中超时时间可相应增加。不同环境中可能会有不同的最优化设置,需要在实际环境中测试确定。

  注:超时时间不要设置太大否则将不会发生网络连接超时。

  

  TCP数据转发

  退出前TCP转发非确认数据段的个数记录在注册表项TcpMaxDataRetransmissions。默认值是5。TCP依据给定连接的回环时间建立一个初始间隔。每次成功转发,间隔时间加倍,直到响应发生或超时发生,此时间隔时间又回到初始值。

  

  TCP 时间等待延迟

  默认状况下TCP在1024和5000之间定位一个端口提供给任意可用的短周期用户端口。当一个给定的通信被TCP关闭,它将在释放前等待一段时间,这称为时间等待延迟。Windows Server 2003默认设置为2分钟,适用于大多数环境。但一些繁忙的系统在短时间内建立了多个连接,将耗尽可用端口,降低网络吞吐率。

  两个注册表项:

  TCPTimedWaitDelay 释放前TCP等待时间

  MaxUserPort TCP连接使用的最大端口数量

  降低等待时间和增加最大端口数量可以提高系统的数据吞吐率。

  此设置适用于非常繁忙的服务器,有数千个并发TCP连接,如很大负载的LDAP,FTP,Web服务器。

  

  TCP 控制块表

  对于每个TCP连接,控制变量保存在一个称为TCP控制块(TCB)的内存块中。TCB表的大小由注册表项MaxHashTableSize控制。在活动连接很多的大系统中,设定一个较大的表可以降低系统定位TCB表的时间。

  在TCB表上分区,可以降低对表的访问的争夺。增加分区的数量,TCP的性能会得到优化,特别是在多处理器的系统上。注册表项NumTcbTablePartitions控制分区的数量。默认是处理器个数的平方。

  

  TCB通常预置在内存中以防止TCP反复连接和断开时TCB反复重新定位浪费时间,这种缓冲的方式促进了内存管理,但同时也限制了同一时刻允许TCP连接的数量。注册表项MaxFreeTcbs配置了在时间等待状态的TCB重新可用之前的连接数量。在NT架构中常设置成高于默认值,以确保有足够的预置的TCB。

  从Windows2000开始添加了一个新特性降低超出预置TCB运行的可能性。如果在时间等待状态的连接多于MaxFreeTWTcbs中的设置,所有超过60秒等待的连接将被强制关闭,以后再次启用。此特性合并到Windows2000Server和Windows Server 2003后,MaxFreeTcbs将不再用于优化性能。

  TCP确认频率

  TCP用延迟确认来降低网络中转发的数据包数量,以提升性能。

  注:此值配置为interface级别。

  默认值为2,100Mbps网络使用5(0x5),1000Mbps网络用13(0xD)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值