eb417457a18e3ab64b070258422ff55c.png

Jmeter分布式部署

在使用Jmeter进行接口的性能测试时,由于Jmeter 是JAVA应用,对于CPU和内存的消耗比较大,所以,当需要模拟数以万计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至会引起JAVA内存溢出错误。为了让jmeter工具提供更大的负载能力,这时可以使用Jmeter提供的分布式功能来启动多台电脑来分压测试。

一、Jmeter分布式执行原理:

1、Jmeter分布式测试时,选择其中一台作为控制机(Controller),其它机器做为执行机(Slave)。

2、执行时,Controller会把脚本发送到每台Slave上,Slave 拿到脚本后开始执行,Slave执行时不需要启动Jmeter,只需要把jmeter-server.bat文件打开,它应该是通过命令行模式来执行的。

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

原理图:

ac4b6006d9fea9650966d0d79b06adb4.png

二、执行机(Slave)配置:

1、执行机机上需要安装JDK、Jmeter,并且配置好环境变量。

2、打开“运行”,输入"cmd",打开运行面板,输入“ipconfig”,找到IP地址,例如是:192.168.8.149

47fd985b7d2e1a43ebc7c8a1600e7a29.png

3、打开Jmeter/bin/jmeter.properties,找到”remote_hosts=127.0.0.1”,把这一行修改为”remote_hosts=192.168.8.149:1099,1099是端口号,可以随意自定义。

c44938e44fd24cf76ac35e6221f23094.png

4、打开jmeter-server.bat文件,就设置完成了,等待控制机(Controller)启动。

三、控制机(Controller)配置:

1、控制机上需要安装JDK、Jmeter,并且配置好环境变量。

2、打开“运行”,输入"cmd",打开运行面板,输入“ipconfig”,找到IP地址,例如是:192.168.8.174

c892293029e33dce7df3bc384bd8e204.png

3、打开Jmeter/bin/jmeter.properties,找到”remote_hosts=127.0.0.1”,把这一行修改为”remote_hosts=192.168.8.149:1099,192.168.8.174:1099,1099是端口号,可以随意自定义。如果有多台代理机,这里需要把所有的代理机的IP地址和端口号都加入进来。

9a8421a56498e249d10d1c030b2f20ea.png

4、配置完了启动jmeter-server.bat,但是会报错,提醒要加密了,具体操作也很简单,双击create-rmi-keystore.bat,根据提示一直填下去,遇到yes与No就直接填:Y 然后回车就ok了。

要注意:生成的rmi_keystore.jks复制到每一台执行物理机的jmeter bin目录下去

然后控制机的再启动 jmeter-server.bat

四、开始添加线程组和请求来运行查看结果:

1、打开jmeter.bat文件,添加线程组,编辑线程数,这里设置100个线程数,循环2次,就是一台机器发送100*2=200个请求。

2e005ad578f1258f0fbf519ae74d4631.png

2、点击运行,可以选择远程启动或者远程全部启动,如果是点击远程启动,可以选择任意一台电脑来运行,如果是点击远程全部启动就会运行控制机和所有的代理机。

bb58501e463228174521bf38c1c6274d.png

3、这里以点击远程全部启动为例。运行结束后,查看聚合报告,每台电脑设置的线程数为200,这里一共是两台电脑,所以是200*2=400个线程数。

3b23951aa3a58048e002b4f00eb7aa0d.png

五、常见问题的解决方法

问题1:jmeter 分布式压力机(多网卡)----处理Connection refused

1,问题现象:

性能测试时,使用的服务器安装了虚拟机,导致在使用jmeter进行分布式测试的时候总是连接失败。

487b1dc0fe027d3e9453d07675ed90e8.png

2,原因分析:

Jmeter采用了rmi进行远程调用,在开启RMI服务时,如果服务端有多个网卡,它只是使用其中任意一个网卡,默认情况下,导致jmeter的controller机器和agent机器不在同一个网段内,无法互通,导致失败

3,解决方法:

我们要在多网卡的服务器上开启RMI服务的话必须指定IP,使他们能够在同一个网段内。

需要以下几步:

a、 修改执行机(Slave),指定执行机的IP

修改jmeter-server文件

修改RMI_HOST_DEF=-Djava.rmi.server.hostname=本机IP

a1e70df9fc1d9bd0c10e7eae5b291f93.png

b、 修改控制机(Controller),指定控制机的IP

修改jmeter.bat文件

新增set rmi_host=-Djava.rmi.server.hostname=本机IP

修改set ARGS=%DUMP% %HEAP% %NEW% %SURVIVOR% %TENURING% %PERM% %DDRAW% %rmi_host%

82504245d4558ad7b1fb2d00628bb0ea.png

修改完成后,重新启动jmeter

问题2:远程服务器执行脚本后,响应数据为空

原因:jmeter客户端默认是统计模式,不显示响应数据,减少开销。

想查看响应数据,打开bin/jmeter.properties文件,去掉mode=Standard前的#。

04cfa26376b4579dce4b32b782d41741.png

问题3:重新打开保存的查看结果树,请求和响应数据为空?

解决方法:在http请求的高级设置中 选择“从HTML文件获取所有内容资源”,将查看结果数据保存为html文件,查看结果数的配置项中的所有选项全部勾选

e7c120c4e5549664040a4e3a25a39028.png

eb826e868e8b3f80ca8e21ecc481596b.png

7014260c7ce1cd7b1a3014b6c2040ce2.png

点击可下载Word文档:

Jmeter分布式部署​n802.com
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐