jmeter分布式压测(三)

一,Jmeter分布式部署测试--远程连接多台电脑做性能测试

  什么是分布式测试:分布式测试是指通过局域网和Internet,把分布于不同地点、独立完成特定功能的测试计算机连接起来,以达到测试资源共享、分散操作、集中管理、协同工作、负载均衡、测试过程监控等目的的计算机网络测试

  在使用Jmeter进行接口的性能测试时候,由于JMeter是java应用,对CPU和内存消耗比较大,所以当需要模拟数以万计的并发用户时,使用单台机器模拟所有的并发用户就会出现电脑卡死等现象,或者会引起java内存溢出的错误。为了Jmeter工具提供了更大的负载能力,这个时候就可以使用Jmeter提供分布式来控制多台电脑进行压力测试 

二,分布式的原理

  1,jmeter分布式测试时,选择其中一台为控制机(Controller),一般都是我们自己的电脑,其他机器作为代理机器(Agent),一般可以用服务器做代理

  2,执行时,Controller会把脚本发送到每台Agent上,Agent拿到脚本后开始执行,Agent执行时不需要启动jmeter,只需要把jmete-server文件打开就行,他是通过命令行来执行的

  3,执行后,Agent会把结果回传给Controller,Controller会收集所有Agent的信息并汇总

  其他的原理解释:

  1. 选择其中一台作为Master机(调度机),其他机器作为Slave机(执行机)
  2. 执行时,Master机会把脚本发送到每台Slave机上,Slave机拿到脚本后就开始执行,不需要启动GUI
  3. 执行完成后,Slave机会把结果回传给Master机,Master机会收集所有Slave机的信息,并汇总

  

 

三、分布式配置

  前提条件:

  • Slave机器的jdk版本需要跟Master机器的jdk版本保持一致
  • Slave机器的Jmeter版本以及插件需要跟Master机器保持一致,操作方法是直接将Master的Jmeter安装目录打包后解压到Slave机器上
  • Slave机器的网络需要跟Master机器的网络保持在同一个局域网,可以ping通

  1.Master机器配置

  在Jmeter的%JMETER_HOME%\bin目录下,使用文本编辑工具打开jmeter.properties配置文件,配置以下参数

  

   第一个ip是本地的ip,第二个ip是slave机器上的ip

  配置完成后重启Jmeter  

  2.Slave机器配置

  在Jmeter的%JMETER_HOME%/bin目录下,使用文本编辑工具打开jmeter.properties配置文件,配置以下参数

  

  如果是linux机器上,则要给bin目录赋予执行的权限:chmod +x -R bin/,还要注意防火前是否开放了1099端口

  3,启动salve的jmeter,   ./jmeter-server

  

   解决办法:./jmeter-server -Djava.rmi.server.hostname=192.168.3.180(这是我的ip)

  提示缺少jsk文件

  

  不管是负载机还是控制机(如果控制机也作为负载机),执行jmeter-server.bat(linux下执行jmeter-server,另外:linux下检查是否启动成功:ps -ef | grep jmeter-server),报错,

  是因为从JMeter 4.0开始,RMI的默认传输机制将使用ssl。SSL需要密钥和证书才能工作,不使用ssl将存在安全漏洞

  解决办法:在控制机bin目录下,点击:create-rmi-keystore.bat

  

  根据提示一直填下去,遇到Yes与No就直接填y,然后回车就ok了

  回车后会在bin目录生成文件:rmi_keystore.jks

  

  点击:点击jmeter-server.bat, 启动RMI注册表

  复制控制机生成的rmi_keystore.jks到每一台负载机jmeter的bin目录下

  再次启动就正常了:

  ./jmeter-server -Djava.rmi.server.hostname=192.168.3.180(这是我的ip)

四,运行

  在控制机查看是否配置成功,需要查重新启动jmeter

  

  我就只使用了一个savle(192.168.3.180)

  

   启动以后从slave上可以看到两行日志:

  

  注意:如果客户端提示找不到系统文件之类的或者提示java.rmi.ConnectIOException: non-JRMP server at remote endpoint,就需要在master和salve的jmete.properies中打开找到#server.rmi.ssl.disable=false,给变更成server.rmi.ssl.disable=true(注意是控制器和压力机都要更改)。每次变更后都要重新打开jmeter

   我本地的机器没有作为负载机,所有没有消耗任何的资源

  这里要注意的是:

  1,控制机和负载机的jdk,jmeter版本都必须一致

  2,控制机用的插件,负载机上也必须有(可以去ext目录下对比)

  3,脚本不需要传递到负载机,但是如果有csv等数据文件,就必须传到负载机上,而且路径要写负载机的路径

  4,负载机只能是一种,要么是windowins要么是liunx,我这里是linux

 

posted @ 2020-04-09 15:54  老僧观天下  阅读(1017)  评论(1编辑  收藏  举报