LR报:Error 27796 Failed to connect to server

Posted what-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LR报:Error 27796 Failed to connect to server相关的知识,希望对你有一定的参考价值。

 

 

原错误信息:

Action.c(58): Error -27796: Failed to connect to server "10.1.44.68:7013": [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

 

根据以上错误信息以此对HKEY_LOCAL_MACHINESystemCurrentControlSetServices cpipParameters下的TcpTimedWaitDelay,MaxUserPort。tcp端口释放的时间和tcp端口的数量进行更改;

附Windows系统下的TCP参数优化(注册表TCPIPParameters):https://blog.csdn.net/libaineu2004/article/details/49054261

修改完后重启机器再次压测只报原Error -27796TcpTimedWaitDelay 错误信息,一下是我解决问题时分析的过程:

 

1.在此压测出现Error -27796错误之前, lr tps,art等资源都是稳定状态;报TcpTimedWaitDelay错误信息时,tps曲线直接下跌到底。使用netstat -ano > d:port.text查看一下,基本都是time_wait状态,这个错误以前运到过,当时由于给予解决问题,便记录了这样解决的过程:http://www.cnblogs.com/what-/p/8048212.html   

分析:根据网上度娘方法,TcpTimedWaitDelay表示系统释放已关闭的TCP连接必须等待的时间,换句话说系统内有大量连接处于TIME_WAIT状态,则会导致并发量与吞吐量的严重下降缩小该项值,可以更快地释放已关闭的连接,难道是客户端性能太好,发压的速率太快导致把tcp/ip的连接或端口占满。不应该呀!在网上查了一下,win7系统最大设置fffe65534tcp/ip,也有设置fff的;  tpc端口数按理说已经是设置的最大了包括tcp的关闭时间也设置了最小,这大量的TIME_WAIT到底是怎么导致的,百思不得其解?  

 

2.最后解决的方法是:在 Run-time Setting/Browser Emulation中将Simulate a new user on each iteration  选项去掉(默认是选中的)。重新运行一切正常,没有错误出现。

  该项值表示默认Controller在调用VUG脚本时,每次迭代模拟一个新的用户,首先清空浏览器中的缓存,在重新获取前端层的信息;去掉这个选项的意思是,始终使用一个tcp/ip链接,不断开,也就是开发人员所说的长链接或持久连接。 

短连接:建立连接-----发送和接收报文1-------关闭连接;

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

3.选r中Run-time Setting/internet Protocol/Winlnet replay instead of sockets(Windows only)替换上面的方式,也是可以解决掉此类问题;

  这个项值表示回放脚本通过sockets端口方式进行, 庆幸的是我们程序支持sockets方式,建议需要通过sockets方式回放时,在选择这项值。

 

4.使用wireshark工具通过对lr通信信息进行抓取,在监测通讯过程中发现,问题出现在第二次握手,客户端已经发出syn包,但服务器端没有接受到syn包,当TIME_WAIT1s秒钟后再次发出syn包,服务器端可以接收到此包,问题出现了,就是说这个请求在没有建立连接时就出现错误了,神奇了。

静下心了慢慢分析了一下客户端与服务器端建立的过程:

1.第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers);

2.第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

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

附tcp/ip三次握手连接及seq和ack号的正确理解:http://blog.sina.com.cn/s/blog_735e97540101ir8h.html

分析:抓取这样的结果,我的tcp端口还没有使用满的前提下,报Error -27796,根据网上排查的思路,一般是脚本的问题。我使用lr最多也是web(html/http),一般走http接口时,我会把Mode=HTML改HTTP,一些get请求有时候就没有RecContentType=text/html不去指定返回的内容,要么空或者要么没有要么删掉,都是可以执行成功的。根据度娘的解答如果缺少RecContentType=text/html返回类型的话,会造成服务器无法识别;

 






以上是关于LR报:Error 27796 Failed to connect to server的主要内容,如果未能解决你的问题,请参考以下文章

Error -27796: Failed to connect to server "ip地址": [10060] Connection timed out

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

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

Error-27796解决方法

lr场景异常Continuing after Error -26479: Conversion of form submission data to the target charset failed

LR回放https协议脚本失败:[GENERAL_MSG_CAT_SSL_ERROR]connect to host "XXX" failed:[10054] Connection