当前位置: 首页 > article >正文

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 拥有更大的负载量,满足真实业务场景(高并发场景)

分布式的最终目的
确保压力机不会出现性能瓶颈
在后面进行性能分析时,不需要考虑压力机是否会导致性能瓶颈的主要原因之一
二、分布式原理

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

Cnotroller 是控制机,Slaves 是多个压力机
分布式测试中,Cnotroller 通过命令行将测试脚本分发给所有 Slave
Slave 不需要启动 Jmeter GUI,通过 CLI 模式执行测试
Slave 执行完后,会把结果回传给 Master
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
  1. 输入命令:jmeter-server -Djava.rmi.server.hostname=172.16.2.114 ,启动 anget 节点。jmeter-server 后面的参数指定 agent 的 IP

3、启动jemter

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

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

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

文档获取方式: 

加入我的软件测试交流群:822269834免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

这份文档,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

 以上均可以分享,只需要你搜索vx公众号:程序员雨果,即可免费领取


http://www.kler.cn/a/154474.html

相关文章:

  • 卷径计算(基于卷径变化微分方程计算实时卷径)
  • 前端Javascript、Vue、CSS等场景面试题目(二)
  • RabbitMQ教程:路由(Routing)(四)
  • 微服务链路追踪skywalking安装
  • 常见的测试方法
  • 【MySQL】SQL语言
  • 基于PAM自定义ssh登陆认证
  • Linux expect命令详解
  • js-md5的简单使用
  • 深入理解贝叶斯分类与朴素贝叶斯模型(Naive Bayes, NB):从基础到实战
  • vscode插件问题
  • 基于SSM的网上书城
  • JOSEF约瑟时间继电器ARTD-DC110V-2H2D 0.25-2.5s导轨安装
  • 指针概念及应用
  • excel表格在线编辑(开源版)
  • 20231202_python练习_b站视频爬取(selenium浏览器模拟登录版)
  • 【华为OD题库-044】跳房子1-java
  • 基于c#+mysql+winform学生成绩管理系统-实践作业
  • D*算法学习
  • python绘制箱线图boxplot——用于多组数据的比较, 异常值检测
  • 基于SpringBoot的企业客户管理系统的设计与实现
  • 四、Lua循环
  • 灯光开不了了,是不是NVIDIA的问题
  • isbn api开放接口
  • 【LeeCode】19.删除链表的倒数第N个节点
  • 电子学会C/C++编程等级考试2022年03月(四级)真题解析