您的位置:首页 > 理论基础 > 计算机网络

性能测试-网络调优

niruoshuifeng 2020-10-26 21:45 423 查看 https://blog.51cto.com/1080869

最近在做公司项目登录模块的性能测试 ,用的工具是jmeter,经常会遇到类似如下问题:
Address already in use: connect
或者:
connect timeout

网上查阅相关资料获悉windows提供给TCP/IP链接的端口为 1024-5000,并且要四分钟来循环回收它们,就导致我们在短时间内跑大量的请求时将端口占满了,导致如上报错。这算是性能测试中常见的网络瓶颈问题

在性能测试中,网络问题,在没有特别说明的情况下,一般指的是http协议下的网络问题,http属于应用层传输协议,用http进行网络通信,用的是TCP/UDP进行传输。

TCP进行传输,有四个组成原件,源地址,源端口,目的地址,目的端口
源地址:发起通信的ip(域名)地址
源端口:发起通信的端口
目的地址:接受通信的ip(域名)地址
目的端口:接受通信请求的端口
举个例子:我的ip:192.168.138.进行授权,登录;授权模块对外端口是443,登录模块对外端口是9998;授权成功会跳转到登录页面,此时的源地址,目的地址都为:192.168.138.,原端口是443,目的端口是9998

在性能测试中,高并发场景下会占用大量的端口,如果这些端口没有释放就会出现端口不够用的情况

一.源端口不够用

首先,端口总共有 65535 个,其中
1.0~1023(共 1024 个),为公认端口,紧密的绑定在一些特定服务上,如 21 端口就是 FTP 服务,80 端口就是 HTTP 服务,443端口是https服务
2.1024~49151(共 48127 个),为注册端口,松散的绑定于一些服务,如 8080 端口常常就用于绑定 Tomcat 服务;
3.49152~65535(共 16384 个), 45ae 为动态或私有端口

所以在使用windows做性能测试时,最大可使用的端口16400+,因为注册端口中有一部分也可用来进行TCP通信,所以一般可用的动态端口会稍微比16384多一点

windows系统TCP连接数
netstat -ano | find "TCP" /i /c

netstat:显示协议 和统计当前TCP/IP链接情况
-a:显示所有连接数和监听端口
-n:以数字形式显示地址和端口号
-o:显示拥有的与每个进程数关联的进程ID

-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

四.服务内部端口瓶颈

首先我们可以查看下当前服务的端口连接数量:

这个命令执行完后,你会获得一个数值,这个数量到达一定的峰值之后,就不会再增长了,当你测试结束的时候,这个峰值就会逐步降低
如果前面三项都没问题情况下,网络瓶颈一直上不去,可尝试此方法,来检查对应的模块服务内部是不是能够处理的链接请求书已经达到瓶颈

标签: