由于Jmeter本身的瓶颈,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至还会引起JAVA内存溢出的错误。要解决这个问题,可以使用分布式测试,多台机器运行所谓的Agent来分担JMeter自身的压力,并借此来获取更大的并发用户数,但是需要进行相关的一些修改
jmeter原理:
1、Jmeter分布式测试时,选择其中一台作为调度机(master),其它机器做为执行机(slave)。
2、执行时,master会把脚本发送到每台slave上,slave 拿到脚本后就开始执行,slave执行时不需要启动GUI
3、执行完成后,slave会把结果回传给master,master会收集所有slave的信息并汇总。
因此脚本只需提前放置在master机器上即可,slave机器无需放置,但是脚本如果用到csv文件做参数化等,则需要将csv文件放在每一个agent机器上,且路径需要与master上配置的csv文件路径保持一致,因为分布式运行时只会下发脚本,但是不会下发脚本依赖的文件
一、windows配置jmeter分布式
1、安装 JMeter,并确定其中一台机器作为 Controller,其他的机器作为 Agent。然后运行所有 Agent 机器上的JMeter-server.bat文件——假定我们使用两台机器 192.168.0.11 和 192.168.0.12 作为 Agent; (Agent机器上必须安装jdk,并设置环境变量)
2、分别在各个agent机器的Bin目录下,编辑JMeter.properties文件, 修改“remote_hosts=127.0.0.1”为agent所在的机器ip,如192.168.0.11或192.168.0.12,修改server_port为任意未使用端口,此处示例设置为1099
3、在Controller 机器的 %JMeter_home%/bin下,编辑JMeter.properties文件,修改“remote_hosts=127.0.0.1”为agent机器所在ip,如“remote_hosts=192.168.0.11:1099,192.168.0.12:1099”,多个agent之间使用逗号连接
4、在Controller 机器的 %JMeter_home%/bin下,编辑JMeter.properties文件,修改server.rmi.ssl.disable=true,并取消注释
5、启动controller机器上的jmeter.bat,选择菜单Run中“Remote Start”中的192.168.0.11:1099或192.168.0.12:1099来运行对应的Agent,如果要让所有agent都执行,可以点击Run 菜单下的“远程运行全部” 菜单即可
6、有时候用作代理的机器太少,仍不能满足需要,则需要将作为Controller的电脑也当作Agent,则同样需要修改 JMeter.properties文件,将Controller的IP地址写入。同时,这个时候,需要打先打开Controller 电脑中JMeter下bin目录下的jmeter-server.bat,然后再打开JMeter.bat,此时,进入Run -> Remote Start菜单,可以看到Controller也作为远程机器进行运行。
二、linux配置jmeter分布式
slave机器:
1.在jmeter安装目录下的bin目录,修改jmeter.properties文件,将如下代码放开注释并设置为true
server.rmi.ssl.disable=true
2.修改jmeter.properties文件,将remote_ip填写为agent的ip,端口默认为1099,也可以在文件中进行修改
3.启动slave
nohup jmeter-sever -Djava.rmi.server.hostname=xxx &
master机器:
1.在jmeter安装目录下的bin目录,修改jmeter.properties文件,将如下代码放开注释并设置为true
server.rmi.ssl.disable=true
2.修改jmeter.propertie文件,将remote_ip处填写slave_ip:slave_port,多个slave用逗号隔开
3.启动master
sh jmeter.sh -n -t xx.jmx -r -l result.jtl -r是启动所有的slave机器,slave列表就是properties文件中的remote_ip
-R指定分布式服务器列表,指定格式同remote_ip
常见问题:
1、Agent机器启动Jmeter_server.bat时,后台提示:"could not find ApacheJmeter_core.jar"
解决方法:这个是开始没有找到ApacheJmeter_core.jar,如果不希望看到Could not find的字样,需要添加环境变量JMETER_HOME,路径为bin目录的上一级目录,这样启动jmeter-server服务时,就不会看到could not Found ApacheJMeter_core.jar。
2、执行jmeter-server.bat报错如下:
解决方法:
修改jmter.properties文件中的server.rmi.ssl.disable=true并去掉注释,然后重启