Linux下使用jmeter进行分布式压测
主控机和压测机均为Linux系统
为了避免一些未知的错误,建议三台机器使用同样版本的jdk、jmeter
注:建议配置好其中一台机器后,直接克隆出另外两台
一台master,两台slave
1. Master配置
进到jmeter安装目录的bin文件夹,修改jmeter.properties文件
vim jmeter.properties
//大概第1038行,添加/修改以下代码:
jmeterengine.nongui.port=0
2. Slave机配置
进到jmeter安装目录的bin文件夹,修改jmeter-server
vim jmeter-server
添加以下代码:
RMI_HOST_DEF=-Djava.rmi.server.hostname=slave本机IP
开启jmeter-server服务
。/jmeter-server
运行成功后,会在控制台打印:
Created remote object: UnicastServerRef [liveRef: [endpoint:[***](local),objID:[***, ***]]]
3. 运行脚本,开始测试
运行以下命令:(master也作为一台负载机)
/home/jump/test/apache-jmeter-5.1.1/bin/jmeter -n -t /home/jump/test/scripts/im_test.jmx -R 127.0.0.1,10.3.0.111,10.3.0.112 -l /home/jump/test/results/ds_qrcodeScan_600u_10min.jtl
看到以下内容则表示各项配置无误,可以开始测试:
Creating summariser <summary>
Created the tree successfully using test.jmx
Configuring remote engine: ***
Configuring remote engine: ***
Starting remote engines
Starting the test @ Sun Mar 04 11:23:31 CST 2018 (1520133811112)
Remote engines have been started
此时slave机器的控制台会提示:
Starting the test on host *** @ Sun Mar 04 11:23:32 CST 2018 (1520133812700)
脚本运行结束后,slave机器的控制台会提示:
Finished the test on host *** @ Sun Mar 04 11:25:53 CST 2018 (1520133953286)
踩过的坑
- 执行压测时,连接agent成功,但是并未开始就结束了,也没有任何报错
原因:有参数文件未读取到
解决方案:- jmeter脚本和测试数据(如果有的话)主机和从机两边都要存放。且controller中jmeter脚本、测试数据的存放路径和agent中jmeter脚本、测试数据的存放路径一致。
- 在原因1的基础上,controller的测试数据地址要用绝对路径,agent的测试数据绝对路径或相对路径均可。
- 执行./jmeter-server,会提示不可执行,需要首先赋予可执行权限
chmod +x jmeter-server
从被动忍受孤独,到安然享受孤独,我想,这便是我们不愿太早面对,却又不得不昂首迎接的,成长。