JMeter中进行分布式测试
作为一个纯 JAVA 的GUI应用,JMeter对于CPU和内存的消耗还是很惊人的,所以当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至还会引起JAVA内存溢出的错误。不过,JMeter也可以像 LoadRunner 一样通过使用多台机器运行所谓的代理来分担负载产生器自身的压力,并借此来获取更大的并发用户数,我们只需手动配置一下即可。
1、在所有期望运行JMeter作为 负载产生器的机器上安装JMeter,并确定其中一台机器作为 控制器,其他的机器作为 代理。然后运行所有 代理 机器上的JMeter-server.bat文件—假定我们使用两台机器172.20.80.47和172.20.80.68作为 代理;
2、在Controller 机器的JMeter安装目录下找到 bin 目录,再找到 jmeter.properties 这个文件,使用记事本或者其他文字编辑工具打开它;
3、在打开的文件中查找“remote_hosts=”这个字符串,你可以找到这样一行“remote_hosts=127.0.0.1”。其中的 127.0..0.1 表示运行JMeter代理的机器,这里需要修改为“remote_hosts=172.20.80.47,172.20.80.68”;
4、保存文件,并重新启动控制器机器上的JMeter,并进入启动 ->远程启动菜单项。就会看到我们刚才添加的两个代理的地址,选中即可运行,如果想同时启动所有代理,选择远程全部启动即可。 要进行分布式测试代理机器上需要添加环境变量,即添加用户变量JMETER_HOME=d:jmeter,系统变量中的path中添加d:jmeterin(假设jmeter放在d盘根目录下)。
在linux上执行常用的命令
在slave机器上开启监听
nohup sh /opt/Distrbute_Jmeter5.2.1/bin/jmeter-server &
本地将jtl变成HTML report
/opt/apache-jmeter-3.3/bin/jmeter.sh -g ./log/log.jtl -o ${WORKSPACE}/reports/
本次执行命令
sh /opt/Distrbute_Jmeter5.2.1/bin/jmeter -n -t /opt/pxq/xxx.jmx -r -l /opt/pxq/xxx.jtl
master机器上带参数运行的脚本,一般与jenkins整合使用
sh /opt/Distrbute_Jmeter5.2.1/bin/jmeter -JtestPlan=ddddd -JuserCount=1000 -JstillTime=600 -n -t /opt/pxq/pxq.jmx -r -l /opt/pxq/pxq20191225_001.jtl
指定slave机器运行
sh /opt/Distrbute_Jmeter5.2.1/bin/jmeter -n -t /opt/pxq/xxx.jmx -R 10.1.9.78:1099,10.1.9.75:1099 -r -l /opt/pxq/xxx.jtl
在slave机器上开启监听 nohup sh /opt/Distrbute_Jmeter5.2.1/bin/jmeter-server & 本地将jtl变成HTML report /opt/apache-jmeter-3.3/bin/jmeter.sh -g ./log/log.jtl -o ${WORKSPACE}/reports/ 本次执行命令 sh /opt/Distrbute_Jmeter5.2.1/bin/jmeter -n -t /opt/pxq/xxx.jmx -r -l /opt/pxq/xxx.jtl master机器上带参数运行的脚本,一般与jenkins整合使用 sh /opt/Distrbute_Jmeter5.2.1/bin/jmeter -JtestPlan=ddddd -JuserCount=1000 -JstillTime=600 -n -t /opt/pxq/pxq.jmx -r -l /opt/pxq/pxq20191225_001.jtl 指定slave机器运行 sh /opt/Distrbute_Jmeter5.2.1/bin/jmeter -n -t /opt/pxq/xxx.jmx -R 10.1.9.78:1099,10.1.9.75:1099 -r -l /opt/pxq/xxx.jtl
总结一下遇到的坑:
1. 在Windows机器上可以运行,在Linux机器上,运行没有反应
报错截图1:
报错截图2:
报错截图3:
报错截图4: