• [转载]Error -27796: Failed to connect to server


     

    问题描述:

    使用LoadRunner的web(HTTP/HTML)协议的多用户向服务器提交数据时,出现错误信息:

    Action.c(11): Error -27796: Failed to connect to server "test.shunde.gov.cn:80": [10048] Address already in use

    Try changing the registry value

    HKEY_LOCAL_MACHINESystemCurrentControlSetServicestcpipParametersTcpTimedWaitDelay to 30

    and HKEY_LOCAL_MACHINESystemCurrentControlSetServicestcpipParametersMaxUserPort to 65534

    and rebooting the machine

    See the readme.doc file for more information

    解决方法:

    打开LoadRunner负载机所在机器的注册表,将HKEY_LOCAL_MACHINESystemCurrentControlSetServicestcpipParameters项中的TcpTimedWaitDelay值设置为5s或者其它(按需要调整)也可以把MaxUserPort值调大(如果这个值不是最大值的话),同时增加脚本的think time,再重启机器。

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

    分析原因:

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

    参数介绍:

    TcpTimedWaitDelay 值決定了 TCP/IP 必须经过多久,才能释放已关闭的连接及重用使用它的资源。这个关闭和释放的间隔称为TIME_WAIT状态,或是区段生命期限上限 (2MSL)状态的两倍。在这段时间內,通往用户端和伺服器的连接重新开启的成本,比建立新的连接低。藉由缩減这个项目的值,TCP/IP 可以更快释放已关闭的连接,提供更多资源给新的连接。如果执行中的应用程式需要快速释放、建立新连接,或多个连接在 TIME_WAIT 状态中造成通讯量太低,因而需要进行调整的话,请调整这个参数。

    预设值是 0xF0,它会将等待时间设为 240 秒(4 分钟)。

    最小的建议值是 0x1E,它会将等待时间设为 30 秒。请利用这个程序来检视或自订您的值。

    启动regedit 指令,浏览至 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTCPIPParameters 登录次机码,建立名称为 TcpTimedWaitDelay 的新 REG_DWORD 值。

    将值设为十进制 30,也就是十六进制的 0x0000001e。这个值会将等待时间设为 30 秒。

    关闭登录编辑器。

    停止并重新启动系統。

    MaxUserPort 值決定了当应用程式向系统要求可用的使用者埠时,TCP/IP 所能指派的最高埠号。如果您的系统报告建立 Socket 时,发生错误异常状况,可能是匿名(短期)埠的数量不当所造成,当系统开启大量的埠来建立 Web 服务器、资料库或其他远端资源的连接时,尤其如此。

    TCP/IP 选项TcpTimedWaitDelay设置(其他版本的)

    当TCP连接被关闭时,{ Protocol, Local IP, Local Port, Remote IP, Remote Port}五元组就进入TIME_WAIT状态,默认时间是4分钟。可以通过一组命令看看tcp的连接状态:

    netstat -ano>>c:port.txt

    本地ip,远程ip,远程端口都是固定的,只有本地端口是变化的,本地端口只能使用1024-5000,因此如果在4分钟内发起了大约4000个连接,这时就会发生异常,下面是使用WCF,客户端的异常:System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted 192.168.101.5:8888

    at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)

    at System.Net.Sockets.Socket.Connect(EndPoint remoteEP)

    at System.ServiceModel.Channels.SocketConnectionInitiator.Connect(Uri uri, TimeSpan timeout)

    TCP有个选项 TcpTimedWaitDelay:

    描述:确定 TCP/IP 可释放已关闭连接并重用其资源前,必须经过的时间。关闭和释放之间的此时间间隔通称 TIME_WAIT 状态或两倍最大段生命周期(2MSL)状态。此时间期间,重新打开到客户机和服务器的连接的成本少于建立新连接。减少此条目的值允许 TCP/IP 更快地释放已关闭的连接,为新连接提供更多资源。如果运行的应用程序需要快速释放和创建新连接,而且由于 TIME_WAIT 中存在很多连接,导致低吞吐量,则调整此参数。

     打开注册表编辑器,如 Regedit.exe 或 Regedt32.exe。

     导航到:HKLMSystemCurrentControlSetServicesTcpipParameters

     双击 TcpTimedWaitDelay,然后将“数值数据” 字段设置为 60(十进制)。

     关闭注册表编辑器,然后重新启动计算机。

    MaxUserPort

    描述:确定在应用程序从系统请求可用用户端口时,TCP/IP 可指定的最高端口号。

    如何查看或设置:

    使用 regedit 命令访问 HKEY_LOCAL_MACHINESYSTEMCurrentControlSet ServicesTCPIPParameters 注册表子键并创建名为 MaxUserPort 的新 REG_DWORD 值。停止并重新启动系统。

    *********************************************************************************************************

    Error -27796: Failed to connect to server "xxxx":

    分析
     
    因为负载生成器的性能太好,发数据包特别快,服务器也响应特别快,从而导致负载生成器的机器的端口在没有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. 修改压力机注册

    MaxUserPort  ----  65534
    端口等待时间调小,最大可用端口调大

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

    netstat -an | grep TIME_WAIT -wc    

    //发现大约有19000个
     
    查询linux系统最大连接数:
    ulimit -n

    设置最大连接数(根据自己需求设置)
    ulimit -n 4096
     
    看来确实有很多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
  • 相关阅读:
    常见业务指标
    1006 换个格式输出整数 (Python)
    1004 成绩排名 (Python)
    1003 我要通过! (Python)
    1008 数组元素循环右移问题 (Python)
    如何使用SSH秘钥链接Github
    在windows下如何正确安装curses模块
    面向数据结构C基础知识点(个人向)
    用Python实现链式调用
    python重点串讲
  • 原文地址:https://www.cnblogs.com/zhengah/p/4794543.html
Copyright © 2020-2023  润新知