jmeter非GUI模式_分布式运行

先搞清楚2个概念:

分布式:分摊自身机器的压力,产生更多的并发用户数,

集群:多台机器有相同的服务能力,一起向外提供更强的服务

我们一台机器最大2000的并发,实际工作中,如果并发用户数,超过2000,这个时候,就要多台机器来虚拟出更多的并发用户数

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

1、分布式原理

master机器------->slave机器-------> 被压测系统

这里的 slave机器可以有多个,只要配置即可

 

处理过程:

(1)master启动以后,会拷贝本地的jmx文件分发到远程的slave机器上;

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

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

 

2、相关配置

slave机器上,需要设置2个点:

(1)jmeter.properties文件中 server.rmi.ssl.disable 属性改为true

(2)jmeter.properties文件中 ,server_port端口号为机器未被占用的端口号,一般默认为1099(一般都不修改,如果有被占用,可以修改),remote_hosts为机器IP

 

 

在master机器上配置:

(1)jmeter.properties文件中 server.rmi.ssl.disable 属性改为true,不适用加密认证传输

(2)jmeter.properties文件中 ,修改remote_hosts,配置为slave机器,注意到由于master机器作为调度机本身会有一定的性能消耗所以我们配置远程执行机的时候并没有把master机器配置进去,只配置了2台执行机。ip:端口

(PS:其实也可以把 master机器也配置上去了,这样master机器也可以作为slave,master机器如果不作为 salve,那就不配置)

 (3)mode=Standard 启用,如果不启用,master机器,看不到saleve的数据

 

 

 

3、在所有slave机器上,启动 server

    在 jmx脚本所在的目录下执行,nohup /home/mispauto/usr/apache-jmeter-5.2.1/bin/jmeter-server  &  

 最好是工程目录下执行启动命令,也就是脚本所在的目录下,因为运行时jmeter需要读取csv资源文件,我们脚本里csv文件存放的是相对路径,也就是命令启动的路径。

(最好用 nohup 执行,因为,如果直接后台执行,有可能断了链接之后,jmeter-server的进程也断了)

 

    启动 server成功的话,可以查到进程:

   

[mispauto@vm0080 ~]$ ps -ef|grep jmeter

mispauto 9966 31473 0 15:21 pts/2 00:00:00 /bin/sh ./jmeter-server
mispauto 9968 9966 0 15:21 pts/2 00:00:00 /bin/sh ./jmeter -Dserver_port=1099 -s -j jmeter-server.log
mispauto 9989 9968 2 15:21 pts/2 00:00:01 /home/mispauto/usr/local/jdk1.8.0_131/bin/java -server -XX:+HeapDumpOnOutOfMemoryError -Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m -XX:+UseG1GC -XX
:MaxGCPauseMillis=100 -XX:G1ReservePercent=20 -Djava.security.egd=file:/dev/urandom -Duser.language=en -Duser.region=EN -jar ./ApacheJMeter.jar -Dserver_port=1099 -s -j jmeter-server.log

   

4、在master机器中执行脚本

/home/mispauto/usr/apache-jmeter-5.2.1/bin/jmeter -n -t /ulic/mysql_project/emisp_login_no.jmx -r -l /ulic/mysql_project/result/result_debug.jtl

-r就是指的 远程运行

如果是有参数配置:用 -G

/home/mispauto/usr/apache-jmeter-5.2.1/bin/jmeter -n -r -t emisp_login.jmx -Gthread=1 -Gloopcount=-1 -Gduration=60 -l /ulic/mysql_project/result/result_debug.jtl

 

 

 

ps:特别注意:

(1) master 机器和slave机器上的 jmeter部署目录,保持一致,jmeter版本一致

(2) master机器上的执行脚本有参数配置文件,比如 csv等,则应该,在slave机器对应的目录上都copy放置一份

(3) 在master执行脚本,尽量都写成 绝对路径方式,脚本名称以及报告路径

(4) jdk的主要版本保持一致

(5) jmeter的插件要一致

(6) 同一局域网,防火墙可以开放端口

 

保持一致性的方法:直接压缩本地的jmeter包,在linux机器上,进行 unzip

 

参考查看:https://www.cnblogs.com/waitingzxy/p/11393049.html  https://www.cnblogs.com/miaomiaokaixin/p/6116927.html

 

posted @ 2020-06-28 15:29  小晓风  阅读(642)  评论(0编辑  收藏  举报