Action.c(28): Error -27796: Failed to connect to server "xxxx": [10060] Connection timed o

Posted python-xiakaibi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Action.c(28): Error -27796: Failed to connect to server "xxxx": [10060] Connection timed o相关的知识,希望对你有一定的参考价值。

Error -27796: Failed to connect to server "125.93.51.230:8080": [10061]

Connection refused..

2013.05.31,这个27796一直是我心中的痛,试过网上所有的方法了,还是不行,我只能怀疑是不是我的客户端OS是win7的,所以才造成这种情况.....哎~!

认真分析这个错误,其实比较容易理解,就是连接不上服务,由于端口已经满了,那么自己的本机已经修改成65534,服务器已经修成成65534,那么这就是唯一的解决方式么?后来仔细思考,我找到了两种解决方式:

1、通过让每次迭代不启用新的连接,我想就可以解决此问题,经过验证,发现这个问题确实不发生了。操作如下,在controller的运行时设置中的-->browser Emulation-->不扣选simulate a new user on each iteration,这样运行时并发人数是多少,那么就启动多少个端口。还是上面的问题,是否勾选这个选项就一定会报27796错误么?

2、回答上面的提问,答案是不一定。如果你每次迭代启用新的端口,但是由于迭代次数*并发数<65534就不会报这个错误。如果设置的迭代次数*并发数>65534,也不一定会出现这个错误,例如:并发人数为1000,平均响应时间为1s,那么也就是说1s会占用1000个端口,也就是说不到66s时端口就会占满,如果服务器能在65s内关闭之前占用的端口之间的连接,也就是说65s超时时间,或者会话保持为65s以内,那么就能解决此问题。

以上提出两种解决方式,都可以解决27796error,一个是修改loadrunner中的controller设置,另一个就是设置服务器的超时时间在合理范围之内,不要太长,也不要太短。

 

 

Action.c(58): Error -27796: Failed to connect to server "www.baidu.com:80": [10048] Address already in use
Try changing the registry value
HKEY_LOCAL_MACHINESystemCurrentControlSetServices cpipParametersTcpTimedWaitDelay to 30
and HKEY_LOCAL_MACHINESystemCurrentControlSetServices cpipParametersMaxUserPort to 65534
and rebooting the machine
See the readme.doc file for more information

 

 

.......2012.10.20.-----

网上的提示多为:LR压力测试遇到如上错误,跟据提示在注册表中已将TcpTimedWaitDelay  改为 1;MaxUserPort 改为 65534;并且重启电脑。运行后仍出现上面的错误。。。。但还是无法解决。

于是~~~~:
在 run-time setting/browser emulation中将simulate a new user on each iteration  选项去掉(默认是选中的)。重新运行一切正常,没有错误出现。

 

【复制博主的猜测:
猜测原因,客户端性能比较好,发出压力太快,所以把tcp/ip的连接或端口占满。在网上查了一下,xp好像默认开启15个tcp/ip。。。

去掉这个选项的意思是,始终使用一个tcp/ip链接,不断开,也就是开发人员所说的长链接或持久连接。   
短连接:建立连接-----发送和接收报文1-------关闭连接

长连接:建立连接-----发送和接收报文1.。。。2.。。。3-----关闭连接 】

 

 

问题描述:

    使用http协议,200VU并发访问:URL=http://124.74.192.111/xx.web.taobao/pages/left.jsp,测试中正常,但URL增加了端口号8080即:URL=http://124.74.192.111:8080/xx.web.taobao/pages/left.jsp,并设置了持续时间,开始运行controller即开始报大量的错:“Action.c(5): Error -27796: Failed to connect to server "124.74.192.111:8080": [10048] Address already in use
Try changing the registry value
HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/tcpip/Parameters/TcpTimedWaitDelay to 30 and HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/tcpip/Parameters/MaxUserPort to 65534 and rebooting the machine”。


问题解决:

    根据错误提示,修改测试机设置:HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/tcpip/Parameters/TcpTimedWaitDelay其值改小,比如5. 重启测试机,再加压测试即可。

    根据提示还要调整“MaxUserPort ”的键值,因为这里的测试机该值已为最大,故不需要调整这个值 。

 

 

 


分析:

    借用zee的分析思路:因为负载生成器的性能太好,发数据包特别快,服务器也响应特别快,从而导致负载生成器的机器的端口在没有timeout之前就全部占满了。在全部占满后,就会出现上面的错误。执行netstat –na命令,可以看到打开了很多端口。所以就调整TCP的time out。即在最后一个端口还没有用到时,前面已经有端口在释放了。

 

 

因为负载生成器的性能太好,发数据包特别快,服务器也响应特别快,从而导致负载生成器的机器的端口在没有timeout之前就全部占满了。在全部占满后,就会出现上面的错误。执行netstat–na命令,可以看到打开了很多端口。所以就调整TCP的time out。即在最后一个端口还没有用到时,前面已经有端口在释放了。
成功的解决方法:
 
在负载生成器的注册表HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters里,有如下两个键值:
TcpTimedWaitDelay
MaxUserPort
1,这里的TcpTimedWaitDelay默认值应该中是30s,所以这里,把这个值调小为5s(按需要调整)。
2,也可以把MaxUserPort调大(如果这个值不是最大值的话)。
==========================================================================================

Action.c(28): Error -27796: Failed to connect to server "router.pay.360buy.com:80": [10060] Connection timed out

 

1. 修改压力机注册

尝试修改注册表中 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters里,有如下两个键值: TcpTimedWaitDelay  --- 1 MaxUserPort  ----  65534 端口等待时间调小,最大可用端口调大

 

二. 在nginx 和 tomcat所在服务器上查看连接数是不是已满, 输入

   netstat -an | grep TIME_WAIT -wc   发现大约有19000个
看来确实有很多time_wait的连接啊!
1. 检查 /ext/sysctl.conf ,是不是有
net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1
这两项配置,发现已经配置了
2. 修改loadrunner的配置
分别修改VUGEN和 control 二者的run time setting中的请求超时时间Preferences 中点击Options 其中有三项的参数可以一次都修改了,
HTTP-request connect timeout              建议修改为1000
HTTP-request receieve timeout             建议修改为1000
Step download timeout                            建议修改为10000
Http Keep Alive time out                            建议修改800
 
 
 
 

1. 修改压力机注册

尝试修改注册表中
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters里,有如下两个键值:
TcpTimedWaitDelay  --- 1
MaxUserPort  ----  65534
端口等待时间调小,最大可用端口调大

 

二. 在nginx 和 tomcat所在服务器上查看连接数是不是已满, 输入

   netstat -an | grep TIME_WAIT -wc   发现大约有19000个
看来确实有很多time_wait的连接啊!
1. 检查 /ext/sysctl.conf ,是不是有
net.ipv4.tcp_tw_recycle = 1 
net.ipv4.tcp_tw_reuse = 1
这两项配置,发现已经配置了
2. 修改loadrunner的配置
分别修改VUGEN和 control 二者的run time setting中的请求超时时间Preferences 中点击Options 其中有三项的参数可以一次都修改了,
HTTP-request connect timeout              建议修改为1000
HTTP-request receieve timeout             建议修改为1000
Step download timeout                            建议修改为10000
Http Keep Alive time out                            建议修改800
转载:http://blog.csdn.net/on_my_way20xx/article/details/8646108
 
 
http://www.51testing.com/html/21/562021-869112.html
 
 
 
性能测试过程中,大家都可能遇到过LR-27796错误,此类错误屡见不鲜..在走访了各大论坛后,发现大侠们给出的各类的版本的27796错误,那么27796是如何产生的呢?接下来跟大家分享下我的所得与感想

在测试一个web站的接口项目中,出现了大量的27796错误(此报错代码有很多种错误提示,比如:27796—Failed to connect toserver、27796—timeout、27796-No Route To Host等),根据LR的帮助提示是修改注册表的两个键值后方可解决,我试着修噶了注册表,重启了机器,在喜气冲冲的进行新的一轮压测过程中发现,错误木有解决,依然存在27796错误。我开始在网上搜索此问题的处理办法,说法云云:1、重启机器、2、修改注册表、3、更换操作系统(囧)我发现对我木有效果,出现错误的请求占总请求的20%左右,这个比例压测是无任何意义的!心灰意冷....

我开始从第一个27796—Failed to connect to server开始查找原因,如果出现连接失败,肯定是客户端与服务器端的通信出现了问题导致的,不论外界原因,实质就是通信!
我试着使用网络工具wireshark在LoadRunner开启时,抓取通信信息。问题出现了,在监测通讯过程中发现,问题出现在第二次握手,客户端已经发出syn包,但服务器端没有接受到syn包,
当timewait三秒钟后再次发出syn包,服务器端可以接收到此包,问题出现了,就是说这个请求在没有建立连接时就出现错误了,神奇了!!!
客户端与服务器端
建立连接如下:
第一次  第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。第二次  第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 
  
三次握手

第三次  第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

问题找到原因了,那么这些不同的27796有那些问题,如何产生的呢?

答案1:大家可能有手工编写脚本的习惯,大家使用最多的协议应该是web/http协议,那么GET、POST请求是最常见的,例如:web_url("www.baidu.com",                 "URL=http://www.baidu.com", 
                "Resource=0", 
                "RecContentType=text/html", 
                "Referer=", 
                "Snapshot=t2.inf", 
                "Mode=HTML", 
                LAST);
这段代码中我们来分析下,如果把以上代码修改为
     web_url("www.baidu.com",                 "URL=http://www.baidu.com",
                LAST);
请 求是否成功?答案是肯定是,可以发起get请求。那么大家实验过没有如果这样的话,在压测过程中是否出现过问题?LR会出现27796错误,大家可以实验 下,那么问题出在那呢?问题就出现在自己的代码中,缺少RecContentType=text/html类型导致GET请求出现问题,服务器端无法识别 请求携带的标示,所以自己的代码编写是27796产生的一部分

原因2:这个是摘自百度的 帖子"因为负载生成器的性能太好,发数据包特别快,服务器也响应特别快,从而导致负载生成器的机器的端口在没有timeout之前就全部占满了。在全部占 满后,就会出现上面的错误。执行netstat –na命令,可以看到打开了很多端口。所以就调整TCP的time out。即在最后一个端口还没有用到时,前面已经有端口在释放了"
说白了点,就是端口没有释放掉timeout状态,没有恢复到监听的状态,所以此时做好的办法就是,重启电脑恢复这些端口占用的状态,当重启机器后,查看状态netsat -nao 后,如果恢复到正常端口的状态,就可以再次进行性能测试了。

原因3:第三个原因
在 性能测试i过程中,可能出现服务器资源利用率过高,导致建立连接失败现象,此类错误应该查看服务器的资源利用率,如果出现了资源利用过高现象,27796 的错误也会在此时产生!27796的错误一般都是由于建立连接失败而导致的,建立连接失败的原因有很多种情况,大家只要明白其中27796的产生错误的实 质就可以了,在大家测试过程中欢迎大家跟帖,在什么情况出现的这种错误,如何解决的继续下去!
 
 
 
http://www.360doc.com/content/10/0805/09/1429048_43780321.shtml
 
 

以上是关于Action.c(28): Error -27796: Failed to connect to server "xxxx": [10060] Connection timed o的主要内容,如果未能解决你的问题,请参考以下文章

使用loadrunner做性能测试时提示action.c(7):error:soap请求“soap

2779: 基础小 X 与机器人 2 (sihuo)

[loadrunner]Action.c(53): Error -27987: Requested image not found [MsgId: MERR-27987]

Action.c(58): Error -27796: Failed to connect to server "hostname"

Loadrunner在场景中添加多个负载机报错:Action.c(38): Error -26488: Could not obtain information about submitted解决方法

LoadRunner出现的问题,在线等!