从0到1手把手教你Jmeter分布式压测

一、jmeter为什么要做分布式压测

  jmeter本身的局限性

  一台压力机的 Jmeter 支持的线程数受限于 Jmeter 其本身的机制和硬件配置(内存、CPU等)是有限的

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

  JVM 堆内存的局限性

  Java 应用的 jvm 堆内存 heap 受压力机硬件限制,虽然我们可以调整堆内存大小

  cmd 启用 Jmeter GUI 时,也会有提示

increase Java Heap to meet your test requirements: Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file

翻译:增加 Java 堆内存来满足测试的要求

  但是单机无法支撑数以万计大并发,此时,需要多个压力机进行分布式压力测试,这样性能瓶颈就不会是我们的压力机了

  联想场景

  ·测试 1000 线程并发的场景,但单机只能支持 200 并发无法达到1000

  · 通过分布式(5 台机器起)可以模拟 1000 并发

  分布式压测

  Jmeter 支持分布式压测,将需要模拟的大量并发用户数分发到多台压力机,使 Jmeter 拥有更大的负载量,满足真实业务场景(高并发场景)。

  分布式的最终目的

  ·确保压力机不会出现性能瓶颈

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

  二、分布式原理

把上面的动图完整看完,就懂了,原理如下:

  1. Cnotroller 是控制机,Slaves 是多个压力机

  2. 分布式测试中,Cnotroller 通过命令行将测试脚本分发给所有 Slave

  3. Slave 不需要启动 Jmeter GUI,通过 CLI 模式执行测试

  4. Slave 执行完后,会把结果回传给 Master

  5. Master 收集所有 Slave 的结果并汇总成一个结果集

  注意

  压力机也可以叫:负载机、代理机、执行机、肉鸡....各种各样的名字,但他们都是 Slave。

  Master 也可以执行测试脚本,也可以不执行只负责管理。

  三、分布式压测的前提条件已经配置

  注意事项:

  1、保持Contorller和Slave机器的JDK、jmeter以及插件等配置版本一致;

  2、如果测试数据有用到CSV或者其他方式进行参数化,需要将data在每台Slave上复制一份,且读取路径必须保持一致;

  3、确保Contorller和Salve机器在同一个子网里面;

  4、检查防火墙是否被关闭,端口是否被占用(防火墙会影响脚本执行和测试结构收集,端口占用会导致Slave机报错);

  5、分布式测试中,通过远程启动代理服务器,默认查看结果树中的响应数据为空,只有错误信息会被报回;

  6、如果并发较高,建议将Contorller机设置为只启动测试脚本和收集汇总测试结果,在配置文件里去掉Contorller机的IP;

  1、修改Contorller配置

  打开Contorller机下jmeter安装文件下的bin目录:jmeter.properties文件,搜索remote_hosts=127.0.0.1,将Slave机的IP和端口写在后面,比如:

remote_hosts=127.0.0.1:1099,172.16.6.90:1099,172.16.6.91:1099

 

其中172.16.6.90和172.16.6.90为Slave机的IP,每个Agent机之间用英文半角逗号隔开,修改保存。注意默认端口都为1099

  切记不论从主机器都要修改:server.rmi.ssl.disable=true,并且去掉#,否则会报错误

  2、负载机

  首先安装好jdk和jmeter环境,具体见我的上一篇文章。然后打开配置文件 /bin/jmeter.properties 找到并取消这段配置的注释 server.rmi.ssl.disable=false ,false改成true。

# Password of Trust store
  #server.rmi.ssl.truststore.password=changeit
  #
  # Set this if you don't want to use SSL for RMI
  server.rmi.ssl.disable=true      # 改成true

输入命令:jmeter-server -Djava.rmi.server.hostname=172.16.2.114 ,启动 anget 节点。jmeter-server 后面的参数指定 agent 的 IP。

  3、启动jemter

  启动jmeter后,设置线程组、配置元件、取样器、监听器等原件,点击“运行-远程启动”:

可以选择远程启动一个Slave机,或者选择远程全部启动,即可进行分布式测试了。

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

  • 29
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JMeter是一款开源的压力测试工具,可以用于对Web应用程序、Web服务、数据库、FTP等各种服务进行压力测试。JMeter分布式架构可以提高测试效率,通过多台机器同时执行测试计划,可以模拟更多的用户并发请求。以下是JMeter分布式压测的步骤: 1. 搭建JMeter服务器 首先需要搭建JMeter服务器,即Master节点。在一台机器上启动JMeter,创建测试计划,并在测试计划中添加线程组、Sampler、Listener等元素。然后在JMeter的“Run”菜单中选择“Remote Start”,选择“Remote Start All”,即可启动JMeter服务器。 2. 配置JMeter客户端 在其他机器上安装JMeter,并使用“jmeter-server”命令启动JMeter客户端。在启动命令中需要指定Master节点的IP地址和端口号,例如: jmeter-server -Djava.rmi.server.hostname=192.168.0.1 -Dserver_port=1099 3. 配置JMeter测试计划 在JMeter的测试计划中,需要将Sampler和Listener的数量控制好,以免出现负载不均衡的情况。同时,需要将Sampler和Listener的名称设置为相同,以便于Master节点进行统计和汇总。 4. 启动JMeter测试 在Master节点上,选择“Run”菜单中的“Remote Start”,选择需要执行的客户端,然后点击“Start”按钮,即可启动测试。在测试执行期间,Master节点会收集所有客户端的测试结果,并进行汇总和分析。 总结: 以上是JMeter分布式压测的步骤,需要注意的是,在使用JMeter进行分布式压测时,需要掌握一定的网络知识和JMeter的使用技巧,以便于实现压测的准确性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值