最近在作公司项目登陆模块的性能测试 ,用的工具是jmeter,常常会遇到相似以下问题:
Address already in use: connect
或者:
connect timeout
网上查阅相关资料获悉windows提供给TCP/IP连接的端口为 1024-5000,而且要四分钟来循环回收它们,就致使咱们在短期内跑大量的请求时将端口占满了,致使如上报错。这算是性能测试中常见的网络瓶颈问题前端
在性能测试中,网络问题,在没有特别说明的状况下,通常指的是http协议下的网络问题,http属于应用层传输协议,用http进行网络通讯,用的是TCP/UDP进行传输。linux
TCP进行传输,有四个组成原件,源地址,源端口,目的地址,目的端口。
源地址:发起通讯的ip(域名)地址
源端口:发起通讯的端口
目的地址:接受通讯的ip(域名)地址
目的端口:接受通讯请求的端口
举个例子:个人ip:192.168.138.进行受权,登陆;受权模块对外端口是443,登陆模块对外端口是9998;受权成功会跳转到登陆页面,此时的源地址,目的地址都为:192.168.138.,原端口是443,目的端口是9998windows
在性能测试中,高并发场景下会占用大量的端口,若是这些端口没有释放就会出现端口不够用的状况服务器
首先,端口总共有 65535 个,其中
1.0~1023(共 1024 个),为公认端口,紧密的绑定在一些特定服务上,如 21 端口就是 FTP 服务,80 端口就是 HTTP 服务,443端口是https服务
2.1024~49151(共 48127 个),为注册端口,松散的绑定于一些服务,如 8080 端口经常就用于绑定 Tomcat 服务;
3.49152~65535(共 16384 个),为动态或私有端口。网络
因此在使用windows作性能测试时,最大可以使用的端口16400+,由于注册端口中有一部分也可用来进行TCP通讯,因此通常可用的动态端口会稍微比16384多一点并发
windows系统TCP链接数
netstat -ano | find "TCP" /i /ctcp
netstat:显示协议 和统计当前TCP/IP连接状况
-a:显示全部链接数和监听端口
-n:以数字形式显示地址和端口号
-o:显示拥有的与每一个进程数关联的进程IDide
-I:搜索不区分大小写
-c:对指定信息进行计数,并显示总计高并发
linux指令查看TCP链接数
netstat -ano |grep 'tcp' | wc -l工具
出现 Address already in use: connect 这个问题,缘由不少,但源地址端口不够用,就是其中一个常见的缘由
可尝试以下方法进行性能调优
方法一:
若是是使用 jmeter 进行性能测试,出现上述报错,能够直接去掉 http 取样器的 【使用 KeepAlive】 复选勾
方法二:
打开系统的注册表,找到 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters], 看下右侧的配置信息,有没有 MaxUserPort 配置项
有,则修改值为 65534(十进制),肯定
没有,则新增一个 DWORD, name 为 MaxUserPort, value 为 65534(十进制),肯定
重启系统
完成这一步,咱们已经知道,咱们的系统当前端口可用范围已经达到最大。
接下来,咱们还须要知道,端口被使用后,若是咱们能及时回收,再利用是否是能提升端口利用率,这样是否是就变相增长了端口了呢?
方法三:
打开系统的注册表,找到 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters], 看下右侧的配置信息,有没有 TcpTimedWaitDe 配置项
有,则修改值为 10(十进制,10 秒),肯定
没有,则新增一个 DWORD, name 为 TcpTimedWaitDe, value 为 10(十进制),肯定
重启系统
完成这一步,就已经完成了发送方的网络调优
接下来 就要分析网络带宽是否达到瓶颈
通常在性能测试环境准备过程当中,若是条件容许的状况下,性能测试服务器的网络带宽最好时1000Mb/s以上,若是有多个网卡还能够继续作bond,这样就可最大限度的规避网络传输瓶颈。
并发压测过程当中可经过以下指令来查看服务器端的网络吞吐,从而肯定是否带宽成为瓶颈:
固然客户端负载机也要确保网络没有达到瓶颈:
若是是 Windows10 电脑,能够在 “网络链接” > 选中机器网卡,右键‘状态’ > 查看弹窗中的‘速度’
压测过程当中,大量请求来到服务器,最后都是经过某个端口,或者几个端口真正获取响应数据。
首先,咱们得知道,一台机器,再强,也只能接收必定量的请求,这个数量是有最大值的,咱们能够经过:
若是以为这个配置的‘max user process' 和 'open files'过小,能够修改 /etc/security/limits.conf
首先咱们能够查看下当前服务的端口链接数量:
这个命令执行完后,你会得到一个数值,这个数量到达必定的峰值以后,就不会再增加了,当你测试结束的时候,这个峰值就会逐步下降若是前面三项都没问题状况下,网络瓶颈一直上不去,可尝试此方法,来检查对应的模块服务内部是否是可以处理的连接请求书已经达到瓶颈