分布式

分布式

一、分布式简介

1、为什么要用分布式

  1.1 单台机器,用jmeter做性能测试,能发起的并发用户数大概是1500,当我们的被测项目,接口能支持的最大可接受的并发用户数,超过了我们单台机器能发起的最大并发用户数之后就需要使用分布式。

  1.2 我们使用多台jmeter,一起向被测服务器发起请求,那么,发起的并发用户数,就可以超过1500 ,这种增加发起方的机器,俗称 ‘压力机’ 。把多个压力机配置相同,然后,控制一起发请求,这个操作的专业术语就叫做分布式。

 

2、作用

  2.1 性能测试压力机的分布式是来解决,我们发起方产生的并发用户数不够的问题的。

  2.2 在服务器端,要能承受更高的请求压力,也有一个分布式,这个分布式,我们一 般叫‘集群’

 

3、用jmeter怎么产生出大量的并发用户数?

  3.1 用多个jmeter,将每个jmeter都放在一台机器上

    3.1.1 主控jmeter---master

jmeter运行环境 --jrejdk 要一致,jdk的大版本要一致
jmeter工具版本要一致
jmeter的脚本,用了csv的话,csv要用相对路径
jmeter插件要一致

    3.1.2 助攻jmeter---slave

jmeter运行环境 --jrejdk 要一致,jdk的大版本要一致
jmeter工具版本要一致
jmeter的脚本,用了csv的话,csv要用相对路径(csv文
件和jmx脚本放在一起)
jmeter插件要一致

  3.2 操作系统

    3.2.1 分布式对操作系统没有要求,我们可以使用不同的操作系统,但是,一般,建议助攻机器的操作系统相同

    3.2.2 master-slave之间的网络,虽然没有强制要求是局域网,但是,我们一般,建议使用局域网

  3.3 脚本分布

    3.3.1 分布式中,助攻机器,是来产生压力的(并发用户数的),可以没有脚本。

    3.3.2 具体执行的脚本,由master主控机来控制。

    3.3.3 分布式的时候,不需要把jmx脚本,放到助攻机器上

    3.3.4 如果脚本中有csv文件,那助攻机器上,是要放置 csv文件的:可以放在jmeter的bin文件夹下 ,也可以放在jmeter运行的命令路径下

 

4、在一台机器上,使用多个jmeter的方法:http://testingpai.com/article/1646385158633

 

二、配置jmeter分布式

1、配置助攻机器

  1.1 配置一台机器,可以是windows,也可以是linux

  1.2 把master机器上jmeter拷贝一份放到助攻机器,保证版本,插件一致

    1.2.1 如果是从Windows电脑拷贝jmeter到linux系统,那么我们还需要给jmeter 的bin文件夹中的文件,赋予可执行权限 chmod +x *

  1.3 修改jmeter.properties配置

    1.3.1 server_port jmeter-server的端口,默认端口 1099 -----可改可不改

    1.3.2 server.rmi.port jmeter-server加密认证数据传输端口 ----可改可不改,如果修改需与上面保持端口一致

    1.3.3 server.rmi.ssl.disable=true 是否启用加密认证传输,true不启动 false启动 -----需配置为true,配置为true后,上面修改的端口也不会使用,所以总结就是只需要修改这一个值就行

  1.4 启动助攻机器

    1.4.1 linux命令:./jmeter-server -Djava.rmi.server.hostname=这个ip,是助攻机器ip,不能写 127.0.0.1, localhost 返回下面:

Created remote object: UnicastServerRef2 [liveRef: [endpoint:[192.168.134.137:42340](local),objID:[12ca34e3:180d741f98a:-7fff, -7736978568408797708]]]
就启用了至少2个端口: server_port自己配置的端口,一个是动态分配端口42340

    1.4.2 windows-dos窗口命令:jmeter-server.bat -Djava.rmi.server.hostname=ip地址

2、配置主控机器

  2.1 jmeter.properties配置文件

    2.1.1 remote_hosts=助攻机器ip:server_port 如果有多个助攻机器,之间 用英文逗号 ------------可选 但建议配置(jmeter图像界面的时候, 这个必须要配置,CLI模式运行时候,这个就可选)

    2.1.2 server.rmi.ssl.disable=true 不启动加密认证传输 -----必须要改

    2.1.3 mode=Standard 启用它, 用于在GUI界面模式时,能在界面中, 看到slave的测试结果数据。(在jmeter-GUI图像界面模式时,这个 是必须要改的,CLI模式时,这个可选)

  2.2 启动jmeter:点击jmeter.bat

    2.2.1 jmeter导航栏:运行 > 远程启动 指定单个启动 会有先后顺序

    2.2.2 运行 > 远程启动所有 同时启动所有的助攻机器执行测试

  可能遇到的问题:jmeter报错engine is busy   原因:是因为我们的助攻机器中,至少有一个助攻机器没有收到 finish的指令, 你重新发送 停止指令,或者找到这个没有收到 finish指令的机器,重启 jmeter-server服务

3、CLI模式运行分布式

  3.1 jmeter.bat -n -t xxx.jmx -l xx.jtl -e -o xxx-dict 执行,只会用当前jmeter 来执行,不会用分布式

  3.2 jmeter.bat -n -t xxx.jmx -r -l xx.jtl -e -o xxx-dict 使用所有的助攻机器来 执行分布式请求:启动的是主控机器中 jmeter.properties文件中 remote_hosts属性中 配置的助攻机器,相当于gui模式中,远程启动所有助攻机器

  3.3 jmeter.bat -n -t xxx.jmx -R slave1_ip:port,slave2_ip:port,slave3_ip:port -l xx.jtl -e -o xxx-dict 指定 用哪些助攻机器来执行分布式请求

4、什么时候增加助攻机器

  4.1 在cli命令中,运行过程中,如果看 Active: xx Started: xxx 这两个数值不一致,基本就可 以断定,需要增加助攻机器。

5、问题

  5.1 如果助攻机器 收到starting...... 没有收到 finish的指令, 就会出现 一直没有停止运行的请求。

    5.1.1 解决办法:(1)主控机,使用图像界面,然后使用远程停止,去停止没有收到finish的机器;(2)主控机器中,执行 shutdown.sh shutdowon.cmd 执行停止cli命令,但是,没有收到 finish指令的机器,还是没有停,你需要手工去重启jmeter-server服务

  5.2 用分布式测试过程中的数据,会汇集在主控机器上,那么主控就会要消耗大量的内存资源。 jmeter默认情况下,只有1g的内存空间。就会出现,内存空间不足的问题,会导致jmeter运行报错,或者整个系统卡死

    5.2.1 解决办法:(1)修改堆栈配置;(2)java 堆栈配置参数 -jar ApacheJMeter.jar -n -t xxx.jmx -l xxx.jtl -e -o xxx-dict 这个内存参数小了,那么 jtl文件转换为 html报告的时间就会很长。

posted @ 2022-05-20 20:42  无名。。。  阅读(125)  评论(0编辑  收藏  举报