一个项目中, 不同的接口,支持的【最大可接受的并发用户数】 不相同的
- 问: 项目能支持的最大可接受的并发用户数
- 1、项目有很多接口,不是所有的接口都做性能测试
- 2、我们现在做了那些业务的接口的性能测试
- 3、在这些业务里面, 最好的接口能支持 最大可接受并发用户数, 最差的接口的最大可接受的并发用户数是多少
- –体现出: 不同的接口,最大可接受的并发用户数是不一样的
项目做性能测试,不是所有的接口都要做性能测试。
- kyj项目做性能测试过程中, 用自己的电脑, 在做的时候,会出现 :
- 在调试脚本的时候,脚本都是成功的
- 在低并发用户数的时候,请求的响应也都是成功的
- 在并发用户数增大了之后,我们请求响应,有些开始出错了
- tps图中,看到响应信息有连续出错,——说明有性能问题,可能是出现了拐点——可能是已经达到了最大可接受的并发用户数。
- 监听器–GUI图形界面:
- 活跃线程数
- 响应时间图
- tps图 -----tps出错,我们说可能有瓶颈
- tps图中,看不到出错的原因
- GUI界面中, 添加了 查看结果树 +勾选了仅错误日志
- CLI-无图形界面
- 要么打开 jtl文件
- 要么把 jtl文件转换为 html报告(
jmeter.bat -n -t vip16\fzcs.jmx -l vip16\jtl\fz-001.jtl -e -o vip16\report\001
) - html报告中,会告诉你,有哪些错误
- 错误信息:
- Address already in use: connect ----地址被用 ------不是服务器出错,而是 网络出错
- Read time out
- connect refuse
- 出现上述类似的错误,其原因,都是网络出错,不是服务器出错 ----所以,我们不能判断为服务器达到瓶颈
- 上述错误,一般开始做性能测试,一定会遇到的。
- 原因:
- 我们一个http请求: 请求包 组成 源地址+源端口 +(数据包) + 目的地址 + 目的端口
- 源端口数量是有限的
- 这个限制,是因为,我们的电脑 位数 限制的 这个数量,最大只有 65535个, 每台机器都是这样,理论上的最大值。
- 这个端口,一般情况下,没有全部开启(Windows相对开启的比较少、 linux开启的相对比多)——> 用linux做发起方的电脑,在没有改系统参数配置的情况下,能发起更多的情况。——>所以,我们一般在企业中,做性能测试,压力机一般选择用linux。
- 每发送一个请求**,就会占用1个源端口。** 端口被占用之后,过一段时间,会自动释放。
- http请求的时候,有三次握手。握手建立,就会占用源端口, 断开握手,** 过一段时间**,端口就会释放。
- 解决办法:
- 1、修改系统参数,把系统可用的端口全部开放,使用到理论上的最大的65535个。
- 65535端口分为三段
- 0~1023(共1024个), 为公认端口,紧密绑定在一些特定服务上,如 21、22、80
- 1024~49151(共48127个),为注册端口,松散的绑定于一些服务上,如8080、3306
- 49152~65535(共16384个),为动态或私有端口
- 65535端口分为三段
- 2、源端口被占用后,需要一段时间释放,我们修改系统参数把这个时间缩短,就可以提升,端口的复用率。-----相当于增加了端口
- 3、把握手的占用时间缩短,也可以提升我们端口复用率。
- 具体做法:
- Windows: 修改系统参数
- 注册表
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters- 右侧,新增DWORD, name 为
MaxUserPort
, value 为 65534(十进制),确定 - 右侧,新增DWORD, name 为
TcpTimedWaitDelay
, value 为 30(十进制),确定- 十进制的30, 是 最小有效值
- 右侧,新增DWORD, name 为
- 修改了注册表,建议要重启电脑
** ** - http请求,keepalive 长连接, 去掉取样器中的 keepalive的复选勾 -----会对性能测试响应时间有影响,但是影响不大
- 长连接 vs 短连接
- 就是 在建立连接之后,保持连接的时长
- 就是 在建立连接之后,保持连接的时长
- 长连接 vs 短连接
- 这三个地方,不能缺
- linux、mac:
- 系统参数配置:
sysctl -a
-----这个是内存参数配置,是在系统启动的时候,读取到内存中的参数- 过滤下:
sysctl -a | grep "net.ipv4"
net.ipv4.ip_local_port_range
参数,是 端口范围- 修改
sysctl -w net.ipv4.ip_local_port_range="1024 65535"
- 修改
- 过滤下:
- 系统参数配置:
- 1、修改系统参数,把系统可用的端口全部开放,使用到理论上的最大的65535个。
sysctl -w net.ipv4.tcp_tw_reuse=1
# 表示开启重用,允许将TIME- WAITsockets重新用于新的TCP连接,默认为0,表示关闭;
sysctl -w net.ipv4.tcp_tw_recycle=1
# 表示开启TCP连接中TIME- WAITsockets的快速回收,默认为0,表示关闭;
sysctl -w net.ipv4.tcp_fin_timeout=5
# 修改系统默认的TIMEOUT时间 为5秒;调小
sysctl -w net.ipv4.tcp_max_syn_backlog=8192
# 进入syn包的最大请求 队列;调大
sysctl -w net.ipv4.tcp_max_tw_buckets=5000
# 表示系统同时保持 TIME_WAIT套接字的最大数量; 调小
sysctl -p
# 配置生效
请不要重启电脑
修改jmeter的取样器的 keepalive 的复选框勾去掉
- 如果被测项目,性能越好, 我们jmeter的放启方的支持的并发用户数量,越低; 被测项目性能越差,发起方的能支持的并发用户数越大。
- 性能越好,-----响应时间就短
- http协议,一定是 收到前一个请求的响应之后,才会发下一个请求。
- 时间越短,短时间发送的请求量更多。----占用的源端口就会更多
- 所以,我们发起方电脑,支持的并发用户数就会更低。
- 所以,我们的发起方要用分布式来 一起产生更多的并发用户数。
- 在做性能测试时,所有的分布式机器,都要进行端口、端口释放时间的修改
出现 Address already in use 类似的错误,大多数的原因,都是因为 ,发起方的电脑端口不够用,我们可以通过修改系统参数的方法,来缓解这个问题,但,不能说一定可以解决,如果还是出现,就只能用 发起方采用分布式 的方式。
Windows系统如何看当前占用的端口数量: netstat -ano |find “TCP” /i /c /i 忽略大小写 /c统计
- linux系统 :
- netstat -ano |grep “TCP”| wc -l
- 或 ss -s