【转自:http://www.51testing.com/html/00/130600-3578408.html】
windows 2003上安装的LoadRunner11做为负载机
在SMTP协议压测时,遇到:并发4K,一直固定失败27个
失败信息:
error -86401 Failed to connceted xxx.xxx.xxx.xxx:25
如果是服务端问题,应该不会每次固定都失败27个,而且另外有几台负载机是正常的
怀疑是客户端自己的问题(虽然正常的几台负载机和有问题的负载机,硬件配置,软件版本都一样,但有问题的一直有问题,正常的一直正常)
看起来比较像是TCP连接数做了限制
亲测结果,以下两个方法都处理后,有效果,记录如下:
方法一:
windows 2003对tcp的连接数做了限制,超多这个数目就会出现系统缓冲区空间不足或队列已满错误。
增加tcp链接数,修改注册表如下:
reg add "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters" /v "MaxUserPort" /d "65534" /t REG_DWORD /f
reg add "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters" /v "TcpTimedWaitDelay" /d "30" /t REG_DWORD /f
reg add "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters" /v "TcpNumConnections" /d "65534" /t REG_DWORD /f
我的2003LR负载机,MaxUserPort已经是65534,TcpTimedWaitDelay已经是30,只是没有TcpNumConnections
方法二:
在Windows计算机的标准设置下,操作系统的默认限制只能使用几百个Vuser,这个限制与CPU或内存无关,主要是操作系统本身规定了默认的最大 线程数所导致。要想突破Windows这个限制,须修改Windows注册表。以Windows XP Professional为例。
(1)打开注册表后,进入注册表项HKEY_LOCAL_MACHINE中的下列关键字:SystemCurrentControlSetControlSession ManagerSubSystems。
(2)找到Windows关键字,Windows关键字如下所示:
%SystemRoot%system32csrss.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没有用。