Jmeter(一)分布式性能测试

背景

因工作需要,最近在学习Jmeter工具,网上有很多比较全面的Jmeter入门指南,我是看老张的博客入门的,博客风格简洁明了,看完受益匪浅,会跟老张好好学习。

(老张博客传送门:https://www.cnblogs.com/imyalost/p/5790268.html)

因为很多基础内容老张的博客都有些,我就不复制粘贴了,就写写我自己在实践中踩过的坑。

一、Jmeter分布式测试的使用背景

一般配置下,jmeter支持并发数大概在300-500,再大的话,可能出现线程排队和阻塞,即非并发情况,甚至造成卡顿、无响应等情况,当需要模拟大量的并发请求,单台jmeter就无法满足,可以通过分布式测试,即将并发请求分配给多台jmeter,来满足这种大规模的并发请求需求。

二、Jmeter分布式测试原理

引用老张的话:

1、分布式测试中,选择一台作为管理机(Contorller),其他的机器作为测试执行的代理机(Agent);

2、执行测试时,由Contorller通过命令行将测试脚本发给Agent,然后Agent执行测试(不需要启动GUI),同时将测试结果发送给Contorller;

3、测试完成,可以在Contorller上的监听器里面看到Agent发来的测试结果,结果为多个Agent测试结果汇总而成;

三、Jmeter分布式测试步骤

1、假设三台电脑IP为192.168.10.1、192.168.10.2、192.168.10.3,将192.168.10.1作为管理机(Contorller),其他两台作为代理机(Agent)

2、给三台电脑配置相同版本的JDK和Jmeter,JDK的安装教程可以自己搜索,Jmeter下载好之后直接解压到想要的路径下,一般是不需要配置JMETER_HOME环境变量的。

3、修改Contorller的Jmeter.properties文件,修改“remote_hosts=127.0.0.1”,如果Contorller仅收集数据,不执行测试计划,则修改为:remote_hosts=10.82.25.28:1099,10.82.25.30:1099

如果Contorller也要执行测试计划,则修改为:remote_hosts=127.0.0.1,10.82.25.28:1099,10.82.25.30:1099

4、修改三台电脑的Jmeter.properties文件,修改“server.rmi.ssl.disable”,将其值改为true,即server.rmi.ssl.disable=true(记得要去掉#号这个语句才能生效)关闭ssl功能

5、在两台Agent机各自启动:jmeter-server.bat,正常启动会在命令窗口显示  “Found ApacheJMeter_core.jar   Createred remote object:。。。”  等信息

6、在Contorller机启动:jmeter.bat,打开测试计划(Test Plan),点击“运行(Run)-远程启动(Remote start)”,可以选择启动某个机,也可以启动全部

7、已启动的机会在命令窗口打印出    “Starting the test on host。。。”   等信息

四、配置过程中遇到的问题

1、Agent机启动:jmeter-server.bat,显示“could not find ApacheJMeter_core.ja”

方案:其实后面又显示“Found ApacheJMeter_core.jar”  = 。=   所以其实是没有问题的,如果还是想要一开始就显示“Found ApacheJMeter_core.jar”,那么就配置JMETER_HOME:

新建环境变量,比如我的:JMETER_HOME=C:\Users\Administrator\Desktop\apache-jmeter-4.0  (即jmeter根目录),然后编辑Path变量,在后面添加  %JMETER_HOME%\bin  记得与前面的路劲要用分号:隔开

2、Agent机启动:jmeter-server.bat,显示“java.io.FileNotFoundException:rmi_keystore.jks(系统找不到指定文件)”

方案:修改“server.rmi.ssl.disable”,将其值改为true(一开始配置的时候我没有修改这个所以报错了)

3、Controller机远程启动Agent机报错:Conne refused host:

方案:这个出错的可能性很多,可以检查一下防火墙有没有关掉(需要关掉防火墙),检查端口有没有被占用:tasklist | findstr "1099",检查电脑是否存在多网卡。

我这里出错的原因是Controller机没有修改“server.rmi.ssl.disable”为true

原文地址:https://www.cnblogs.com/cyanlee/p/9773473.html