系统和软件配置:
os:windows 2003
loadruner版本:LoadRunner11
loadrunner:协议:SMTP协议
并发数:200
问题描述:
失败27个
失败信息:
error -86401 Failed to connceted xxx.xxx.xxx.xxx:25
分析过程:
固定失败27,排除服务器错误
怀疑是客户端自己的问题(虽然正常的几台负载机和有问题的负载机,硬件配置,软件版本都一样,但有问题的一直有问题,正常的一直正常)
验证:
怀疑TCP连接数做了限制,验证后可以解决
解决方法:
方法一:
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
win2003机器上用LR负载机,MaxUserPort已经是65534,TcpTimedWaitDelay已经是30,只是没有TcpNumConnections
方法二:
在Windows计算机的标准设置下,操作系统的默认限制只能使用几百个Vuser,这个限制与CPU或内存无关,主要是操作系统本身规定了默认的最大 线程数所导致。要想突破Windows这个限制,须修改Windows注册表。以Windows XP Professional为例。
(1)打开注册表后,进入注册表项HKEY_LOCAL_MACHINE中的下列关键字:System\CurrentControlSet\Control\Session Manager\SubSystems。
(2)找到Windows关键字,Windows关键字如下所示:
%SystemRoot%\system32\csrss.exe bjectDirectory=\Windows
SharedSection=1024,3072,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1
ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2
ProfileControl=Off MaxRequestThreads=16
SharedSection=1024,3072,512关键字的格式为xxxx,yyyy,zzz。其中,xxxx定义了系统范围堆的最大值(以KB为单位),yyyy定义每个桌面堆得大小。
(3)将yyyy的设置从3072更改为8192(即8MB),增加SharedSection参数值。
注意,上面两种方法,因为修改注册表,都是重启服务器才会生效,只重启LR没有用。