需求
现在项目需要对某个接口进行并发访问,测试服务器的抗压处理批量请求能力
现况
- 单台机器由于配置(CPU、内存)问题,模拟500用户时,可能就出现卡死现象
- 按照一般的压力机配置,jmeter的GUI模式下(Windows),最多支持300左右的模拟请求线程,再大的话,容易造成卡顿、无响应等情况,这是限于jmeter其本身的机制和硬件配置。
- 有时候为了尽量模拟业务场景,需要模拟大量的并发请求,这个时候单台压力机就显得有心无力。针对这个情况,jmeter的解决方案是支持分布式压测,即将大量的模拟并发分配给多台压力机,来满足这种大流量的并发请求场景。
分布式压测原理
1,一台电脑作为控制机(Controller),其它电脑做为执行机(Agent);
2,执行机启动一个服务,控制机连接该服务从而控制执行机;
3,执行时,控制机会把脚本发送到每台执行机上,执行机拿到脚本后就开始执行;
4,执行机执行时不需要启动Jmeter界面,可以理解它是通过命令行模式执行的;
5,执行完成后,执行机会把结果回传给控制机,控制机会收集所有执行机的信息并汇总;
执行方案
1,1台电脑(控制机)分发执行任务
2,N台电脑(执行机)执行任务
3,在执行机上启动监听服务程序
4,在控制机上启动运行
5,测试计划->聚合报告
实现方案
1-执行机-jmeter.properties设置
打开执行机下jmeter安装文件下的bin目录:jmeter.properties, 找到server_port
server_port=1099. 1099为执行机自定义端口号
server.rmi.ssl.disable=false改为server.rmi.ssl.disable=true
注意⚠️:
1,自定义的端口号,要选择未被占用的端口号
2,N台执行机分别设置
2-控制机-jmeter.properties设置
打开控制机下jmeter安装文件下的bin目录:jmeter.properties, 找到remote_hosts
remote_hosts=127.0.0.1:1099,127.0.0.1:1100
server.rmi.ssl.disable=false改为server.rmi.ssl.disable=true
注意⚠️:
1,多个执行机的ip间要用全英文的半角逗号隔开
一些注意事项
- N台执行机同时接受控制机脚本去执行然后反馈给控制机,所以线程数设置=(想要压多少/N);
- 修改完端口要重启Jmeter;
- 参数文件:如果使用csv进行参数化,那么需要把参数文件在每台执行机上拷一份且路径需要设置成一样的;
- 每台机器上安装的Jmeter版本和插件最好都一致,否则会出一些意外的问题;