jmeter分布式压测

一、定义

jmeter分布式压测:指将需要模拟的大量并发用户数分发到多台压力机,使jmeter拥有更大的负载量,满足真实业务场景(高并发场景)。可以理解为通过一个Jmeter控制台来远程控制多个Jmeter引擎完成测试。

二、原因及目的

1、原因:

1)一台压力机(用来跑脚本的电脑)的jmeter默认最大支持1000左右的并发用户数(线程数),再大的话,容易造成卡顿、无响应等情况,这是受限于jmeter其本身的机制和硬件配置(内存、CPU等);

2)由于jmeter是java应用,对CPU和内存的消耗较大,在需要模拟大量并发用户数时,单机很容易出现java内存溢出,导致测试脚本本身就有瓶颈。

例如场景:

测试5000并发的场景,如果只用一台电脑跑压测脚本,无法达到5000并发(因为单机只能支持1000并发)。此时就需要通过分布式模拟5000并发(5台机器起)。

2、目的:

1)确保压力机不会出现性能瓶颈;

2)在后面进行性能分析时,不需要考虑压力机是否会导致性能瓶颈的主要原因之一。

三、原理

jmeter分布式原理:由控制机发压测脚本到每台远程执行机(压力机),然后由控制机收集执行机结果。

ps:控制机可以执行测试脚本,也可以不执行只负责管理。压力机系统不限,可以是win、mac、linux。

1)Jmeter分布式测试时,选择其中一台作为控制机(Controller),其它机器做为代理机(Agent),也可以叫做压力机。

2)执行时,控制机自动将测试计划(压测脚本)发送到每台压力机上,压力机拿到脚本后开始执行,压力机执行时不需要启动Jmeter,只需要把jmeter-server.bat文件打开,它应该是通过命令行模式来执行的。

3)执行后,压力机把结果回传给控制机,控制机收集所有压力机的信息并汇总。

四、分布式压测步骤

1、前提

控制机和压力机的jmeter要一致。

具体体现在:

1)jmeter版本、jmeter插件一致(可直接将控制机上的jmeter压缩包移到每台压力机上解压使用);

2)JDK版本一致;

3)jmeter脚本中csv文件(数据、路径)一致;

4)防火墙已关闭;

5)保证在同一个局域网(可ping通)(如果ping不通,可能是防火墙没关)

控机机和压力机保持一致的方法:直接将控制机上的jmeter压缩包移动每台压力机上解压使用。

2、准备工作

压力机:

1)将控制机的 jmeter 压缩包发送到每台压力机上,解压。

2) 修改每台压力机的jmeter安装目录下的\bin\jmeter.properties中server_port、server.rmi.port、server.rmi.ssl.disable数值。

a)修改server_port、server.rmi.port的端口号。(jmeter默认端口号为1009,可修改任意端口,但该端口号不能被其他进程占用)(每台压力机端口号是否一致并不重要,只要端口号在那台电脑上不被占用就可以,也就是说jemter在那台电脑上可以正常使用就可以)。

server.rmi.port端口号与server_port保持一致即可(因为默认server.rmi.port是注释掉的,所以可以不用管server.rmi.port端口号是否与server_port保持一致)。

b)修改server.rmi.ssl.disable为true。(jmeter默认server.rmi.ssl.disable=false,代表需要认证。设置为 true,减少不必要的麻烦)

如果设置server.rmi.ssl.disable=false,那么打开压力机的jmeter-server.bat时,会报“系统找不到指定的文件”。所以server.rmi.ssl.disable必须为true。

3)启动每台压力机的jmeter安装目录下的\bin\jmeter-server.bat。(在控制机设置好remote_hosts后才能进行这一步操作)

(在控制机设置好remote_hosts后,启动压力机的jmeter-server.bat,就会看到这行字,说明控制机与压力机之间已创建连接,可远程启动。)

控制机:

 1)修改控制机的jmeter安装目录下的\bin\jmeter.properties中remote_hosts数值。

多个压力机之间用英文逗号隔开。

ps:如果控制机也用作压力机,则remote_hosts加上127.0.0.1:端口号,且需修改控制机的jmeter安装目录下的\bin\jmeter.properties中server_port、server.rmi.port、server.rmi.ssl.disable数值,并且启动控制机的jmeter安装目录下的\bin\jmeter-server.bat(与压力机步骤一样)。

2)设置mode(jmeter默认注释掉mode=Standard)。

用于查看分布式测试过程中,每个压力机的测试结果。若不启用,在运行过程中,控制机是无法实时看到压力机的结果。体现在察看结果树,如果mode=Standard被注释了,则控制机收集到压力机的执行结果中的响应成功的响应数据为空(只有错误信息会有返回)。若不注释,则响应成功的响应数据有值。

3、控制机运行分布式压测

我们知道jmeter运行压测有2种模式:GUI模式、CLI模式。那么分布式压测也就有2种方式。

GUI模式:

1)打开控制机的jmeter安装目录下的\bin\jmeter.bat(也就是进入控制机的jemter的GUI界面),打开需要进行压测的脚本,并设置线程属性;

ps:只需要修改控制机的脚本,启动压力机之后,压力机执行的就是最新的脚本。

2)点击菜单“运行”-“远程启动”,就可以看到控制机下的所有压力机(也就是上面控制机设置的remote_hosts数值),可以一台台启动,也可以直接启动所有压力机(点击“远程启动所有”即可)。

远程启动压力机成功的话,在压力机的jmeter-server.bat可看到这两行信息,说明压力机接收压测脚本成功且执行结束。

此时,我们就可以在控制机的GUI界面查看到压力机执行的结果了。

执行过程中可能遇到的问题:

1、控制机远程启动某一台压力机时,控制机的GUI界面报连接失败,说明控制机的remote_hosts数值错误,需要核对下是否压力机的ip地址、端口号是否正确。 

2、控制机远程启动某一台压力机时,压力机的jmeter-server.bat报端口被占用,则需修改该压力机的端口号。

CLI模式:

1)控制机进入jmeter安装目录下的\bin文件夹,输入cmd,进入cmd窗口,输入:

执行压测脚本:jmeter -n -t D:\jmeter\addddd.jmx -r -l D:\1\test.jtl

生成报告:jmeter -g D:\1\test.jtl -e -o D:\1\output

跟单机压测的CLI模式是差不多的,只是在执行压测脚本的那条命令行加了:-r,代表远程启动所有压力机;如果要远程启动其中一台压力机,则将-r修改为-R ip:端口号就可以了。

执行成功后,在控制机的D:\1\目录下可以看到压测结果。

JMeter分布式是使用多台计算机同时执行JMeter试计划,以模拟大量并发用户力。使用分布式可以有效提高负载能力,并避免单台机器的性能限制。在分布式中,一个JMeter主控节点负责管理所有的试计划和生成结果报告,而多个JMeter工作节点则同时执行试计划,并将结果返回给主控节点进行统计和分析。 要进行JMeter分布式,需要进行以下步骤: 1. 配置JMeter主控节点:在主控节点上,设置一个JMeter试计划,并将其配置为分布式试模式。在试计划中,设置各个线程组、取样器和监听器等试元素,以模拟真实的用户行为。 2. 配置JMeter工作节点:在每个工作节点上,安装并配置JMeter,并确保与主控节点在同一局域网中。工作节点需要拥有相同的试计划文件和试数据。 3. 启动主控节点:在主控节点上启动JMeter,并开始。主控节点会将试计划和相关配置发送给各个工作节点,并收集并分析结果。 4. 启动工作节点:在每个工作节点上启动JMeter,并连接到主控节点。工作节点会接收主控节点发送的试计划和相关配置,并执行试计划。 5. 监控和分析结果:在过程中,可以通过主控节点的监听器查看实时结果,并在结束后生成详细的报告进行分析。 以上是JMeter分布式的基本流程。通过合理配置和管理分布式环境,可以更好地模拟真实的用户场景,评估系统的性能和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值