一:分布式使用场景及原理
使用场景:由于Jmeter 是JAVA应用,对于CPU和内存的消耗比较大,所以,当需要模拟数以万计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至会引起JAVA内存溢出错误。为了让Jmeter工具提供更大的负载能力,这时可以使用Jmeter提供的分布式功能来启动多台电脑来分压测试。
原理:1、Jmeter分布式测试时,选择其中一台作为调度机(master),其它机器做为执行机(slave)。
2、执行时,master会把脚本发送到每台slave上,slave 拿到脚本后就开始执行,slave执行时不需要启动GUI,我理解它应该是通过命令行模式执行的。
3、执行完成后,slave会把结果回传给master,master会收集所有slave的信息并汇总。
二:配置执行机(slave)和调度机(master)
1、都必须安装了jmeter,并且已经配置好环境
2、查看slave的ip及端口,bin目录下,点击jmeter-server.bat查看,如图:
3、调度机(master)配置
找到Jmeter的bin目录下jmeter.properties文件,搜索remote_hosts=127.0.0.1,将slave机的IP和端口写在后面,比如:
remote_hosts=127.0.0.1,127.0.0.2:80,127.0.0.3:80其中127.0.0.2和127.0.0.3为Agent机的IP,每个slave机之间用英文半角逗号隔开,修改保存。
三:运行
1、slave机启动jmeter-server.bat
2、master机打开jmeter界面,选择运行,有运程启动、运程全部启动两个选项,如图:
3、然后就基本配置完成了,可以在slave机器看到信息了,master也会收集到运行结果。
四、注意事项
1、保持master和slave机器的JDK、jmeter以及插件等配置版本一致;
2、如果测试数据有用到CSV或者其他方式进行参数化,需要将data pools在每台slave上复制一份,且读取路径必须保持一致;
3、确保master和slave机器在同一个子网里面;
4、检查防火墙是否被关闭,端口是否被占用(防火墙会影响脚本执行和测试结构收集,端口占用会导致slave机报错);
5、分布式测试中,通过远程启动代理服务器,默认查看结果树中的响应数据为空,只有错误信息会被报回;
6、如果并发较高,建议将master机设置为只启动测试脚本和收集汇总测试结果,在配置文件里去掉master机的IP;
7、分布式测试中,如果1S启动100个模拟请求,有5个slave机,那么需要将脚本的线程数设置为20,否则模拟请求数会变成500,和预期结果相差太大。
五:自定义端口
上面其实已经实现了Jmeter的分布式测试,这部分主要介绍下如何自定义slave端口:
1、slave:在slave机的Jmeter的bin目录下,找到jmeter.properties文件,修改如下两个配置项,比如我这里修改为1888:
server_port=1888
server.rmi.localport=1888
2、启动slave机上的jmeter-server.bat,如下图,端口已经修改为:1888