前言
我经常会遇到一些学生跟我聊性能测试工具Jmeter不好用,我问为什么不好用,他说压力稍微大一些就上不去报错了。一看报错信息就是地址被占用了。
这就是典型的分布式的需求了。如果做性能测试,这个基本的问题都不会解决的话,那么表示性能测试你还没有入门哦!
性能测试为什么需要分布式?
我们做性能测试的工具Jmeter是安装在电脑或者服务器机器上的,不管是windows的电脑还是Linux系统机器,能够被使用的端口都是有限的,理论上的最大值 65535个,但是实际上都还到不了这个值:
- linux机器: 默认的时候理论上可用的端口大概有3w个左右
- windows机器: 默认的时候理论上只有 大于 1w+多个端口
- 因为windows机器作为图像界面系统,就是为 普通用户使用, 一般用不了 很多端口。
然而,我们接口发送请求所用的协议是HTTP协议,这个协议特点:
- 默认是一个长连接【connection= keep-alive】。所以,每一个请求占用一个端口,而这个请求因为是长连接还会保持一段时间,不会立马释放这个端口。这就导致机器上的端口快速被消耗完。
- http协议是一个同步协议,一个请求发送完,一定要等收到响应了才发送下一个请求,所以如果服务器的性能越好,服务器能短时间内处理大量的请求,Jmeter客户端的端口就更快被消耗完,所以服务器性能越好,Jmeter能产生的并发用户数反而越少。
而实际项目有可能接口性能比较好,能超过2000并发用户数,这就会超过1个Jmeter客户端能产生的并发用户数。这个时候,我们就需要通过增加Jmeter的机器来产生更多的并发用户数。这就是分布式。
分布式的原理
按照上面讲的分析,分布式就是为了增加客户机对服务器执行并发请求,突破单个机器的瓶颈。分布式的配置图如下:
- 1、一台主控制/调度机【Controller/Master】, 多台机器为执行机/助攻机【Slave/Agent】
- 2、执行的时候master会把脚本发送到助攻机上,每个助攻机拿到脚本后开始在还行
- 注意每台助攻机上都需要有Jmeter安装环境;
- Jmeter不需要启动gui界面,直接用cli命令行执行;
- 助攻机会用Linux/windows/macOS都可以,一般推荐用同种机器。
- 3、执行完成后,slave会把结果传回给master,master会收集所有的salve信息会汇总显示。
所以,性能测试脚本只需要管理者在主控制机上维护和修改变更就可以。假设管理者把线程数变了。每个助攻机的执行者就都按照新的线程数来产生并发用户数。
分布式环境搭建
前提条件准备:
- 主机和助攻机器jmeter的版本要相同,jdk要主版本要一致。
- Jmeter的csv的脚本相对路径的启始点一致。
- Jmeter的插件要一致 。
- 所有的主控机和助攻机都必须用有线连接网络,同一局域网。
助攻机的配置:
修改Jmeter的配置文件:jmeter.properties
- 修改 server_port 端口 :默认是1099, 可以不改,也可以修改为自己定义的;
- 修改 server.rmi.port 端口 : 可以不改,如果改就改成和上面相同
- 去掉认证 server.rmi.ssl.disable=true 不使用加密认证传输数据
完成这些修改,并保存文件,助攻机器的配置完成。保证每台助攻机器都同样的配置。
主控机的配置:
修改配置文件:jmeter.properties
- remote_hosts=助攻机器ip:端口 ,如果有多个助攻机器信息之间用逗号分开 ;
- 去掉认证:server.rmi.ssl.disable=true
确认模式:mode=Standard 这个属性,主控和助攻机器之间,使用通用的标准的数据交换方式。
注意: 修改属性配置文件,一定要保存文件,然后重启jmeter才生效
启动助攻机,启动命令:
windows:jmeter-server.bat -Djava.rmi.server.hostname=机器ip
**linux: **./jmeter-server -Djava.rmi.server.hostname=192.168.88.134
配置完成后,可以在jmeter图形界面中,看到助攻机器传回来的数据。
点击上图的启动远程可以启动主动机开始跑脚本。可以启动部分,也可以同时启动所有助攻机跑脚本。如此就完美解决了一台客户机运行报错压力上不去的问题。
欢迎来到testingpai.com!
注册 关于