如何利用jmeter进行分布式压测

监控JMeter压力机的性能

netstat -an | find "TCP" /C

 

处理过程:

一:调度机master启动以后,会拷贝本地的jmx文件分发到远程的slave机器上;

二:slave机器拿到脚本以后启动命令行模式去执行脚本,对于每台slave机器拿到的脚本都是一样的,所以如果jmx脚本为50个线程跑3分钟,那么实际并发就是50*3=150个线程并发跑3分钟;

三:执行时,slave会把执行获得的数据结果传给master机器,master机器会收集所有slave机器的信息并汇总,这样master机器上就存在一份所有slave机器汇总的数据结果。

 

注意事项:

一:我们注意到master机器启动后会拷贝jmx文件到slave机器,所以我们不需要在每台slave机器上也上传一份jmx,只需要在master机器上上传一份jmx脚本即可。

二:参数化文件:如果使用csv进行参数化,那么需要把参数文件在每台slave上拷一份且路径需要设置成一样的。

三:调度机(master)和执行机(slave)最好分开,由于master需要发送信息给slave并且会接收slave回传回来的测试数据,所以mater自身会有消耗,所以建议单独用一台机器作为master。

四:保证每台机器的jmeter版本和插件版本相同,避免造成一些意外问题。

五:分布式测试总样本数 = 线程数 * 循环次数 * 执行机总数, 样本计数逻辑为:执行机slave执行的测试脚本是由调度机master分发的,故每台执行机执行的测试脚本都是相同的,故而性能测试总样 本数 = 测试脚本样本数 * 执行机总数,而测试脚本样本数为线程数 * 循环次数

六:在master中启动slave机器时提示如下错误,检查slave的防火墙是否关闭

systemctl status firewalld :检查防火墙状态,说明防火墙在运行

 systemctl stop firewalld:关闭防火墙,说明执行成功

2:说完了原理,现在我们来说如何做jmeter分布式测试

  • 在所有需要做分布式的机器上部署java和jmeter,要求需要保证每台机器上部署的jmeter版本相同插件版本也相同,最好部署在同一路径下(这样如果有csv参数化比较方便)

jmeter底层用java开发,耗内存、cpu,如果项目要求大并发去压测服务端的话,jmeter单节点难以完成大并发的请求,这时就需要对jmeter进行分布式测试:

 

调度机(Controller):主要负责性能测试脚本的分发,及各个执行机(Slave)的测试结果收集汇总,报告产出。

执行机(Slave):主要负责执行性能测试脚本及断言等(命令行模式执行,无界面),并将执行结果反馈给调度机(Controller),若断言执行成功则不返回请求响应数据及详细断言信息。

 

比如我部署在

三台执行机(Slave)

192.168.1.161、192.168.1.162、192.168.1.163

 

调度机(Controller)为:

192.168.5.133

四台机器上,每台机器部署路径为:D:\apache-jmeter-3.0

 

一、执行机配置(Slave)

1、JDK版本为 1.7.0_80,配置相应的环境变量

 

注意:所有的jdk的版本需要一样,JMeter的版本也需要一样

2、JMeter版本为 3.0,配置相应的环境变量

3、配置执行机服务器远程启动端口

修改3台slave机器

192.168.1.161、192.168.1.162、192.168.1.163压力机中

%JMETER_HOME%/bin/jmeter.properties文件中server_port端口号为机器未被占用的端口号,一般默 认为1099,此处我修改为7890(可以使用默认端口或者改成其他端口,只要未被占用就行),remote_hosts为127.0.0.1不需要修改

server_port=7890

#server.rmi.localport=1029

 

修改完成保存,我配置的3台机器为:

192.168.1.161机器(remote_hosts:127.0.0.1、server_port:7890)

192.168.1.162机器(remote_hosts:127.0.0.1、server_port:7890)

192.168.1.163机器(remote_hosts:127.0.0.1、server_port:7890)

 

 

4、启动执行机服务器

管理员执行脚本:JMETER_HOME/bin/jmeter-server.bat 或 JMETER_HOME/bin/jmeter-server,启动后命令行页面如下图所示:

 

 

二、调度机配置(Master)

完成slave机器的配置后,此时配置master机器,我的1台master机器为192.168.5.133

注意到由于master机器作为调度机本身会有一定的性能消耗所以我们配置远程执行机的时候并没有把master机器配置进去,只配置了3台执行机

从启动命令行窗口可见,配置的远程启动端口已经生效。

jmeter -JthreadNum=100 -Jtime=200 -n -t D:\apache-jmeter-3.0\bin\log.jmx -r -l D:\apache-jmeter-3.0\thinkive\resultReport\jtl\log.jtl

 

在Linux环境下搭建JMeter分布式压测环境时,可能会遇到一些问题。其中一个常见问题是启动./jmeter-server时出现"Cannot start. localhost.localdomain is a loopback address"的错误信息。解决这个问题的方法是编辑jmeter-server文件,设置固定的代理服务器主IP。具体步骤如下: 1. 打开Linux中的jmeter-server文件: ``` cd /opt/apache-jmeter-4.0/bin vi jmeter-server ``` 2. 在jmeter-server文件中找到RMI_HOST_DEF这一行,并取消注释: ``` # One way to fix this is to define RMI_HOST_DEF below RMI_HOST_DEF=-Djava.rmi.server.hostname=192.168.248.130(当前器ip) ``` 将当前Linux主查询到的IP地址填入RMI_HOST_DEF的值中。 另外,还需要确保CLASSPATH环境变量正确设置。可以使用以下命令设置CLASSPATH: ``` export CLASSPATH=${JMETER}/lib/ext/ApacheJMeter_core.jar:${JMETER}/lib/jorphan.jar:$JMETER/lib/logkit-2.0.jar:${CLASSPATH} ``` 此外,还需要在jmeter.properties文件中进行一些配置。可以通过编辑jmeter.properties文件,将以下配置项设置为true: ``` jmeter.save.saveservice.output_format=xml jmeter.save.saveservice.response_data=true jmeter.save.saveservice.samplerData=true jmeter.save.saveservice.requestHeaders=true jmeter.save.saveservice.url=true jmeter.save.saveservice.responseHeaders=true ``` 通过以上步骤,你就可以在Linux环境下成功搭建JMeter分布式压测环境了。 #### 引用[.reference_title] - *1* [Linux环境下搭建jmeter分布式压测](https://blog.csdn.net/shanezhijian/article/details/124668524)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Jmeter分布式压测环境搭建](https://blog.csdn.net/weixin_51084345/article/details/127261500)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值