首页 > 技术文章 > Linux下使用jmeter进行分布式压测

51benpao 2020-11-11 21:59 原文

主控机和压测机均为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)

踩过的坑

  1. 执行压测时,连接agent成功,但是并未开始就结束了,也没有任何报错
    原因:有参数文件未读取到
    解决方案:
    • jmeter脚本和测试数据(如果有的话)主机和从机两边都要存放。且controller中jmeter脚本、测试数据的存放路径和agent中jmeter脚本、测试数据的存放路径一致。
    • 在原因1的基础上,controller的测试数据地址要用绝对路径,agent的测试数据绝对路径或相对路径均可。
  2. 执行./jmeter-server,会提示不可执行,需要首先赋予可执行权限chmod +x jmeter-server

推荐阅读