Jmeter系列(39)- Jmeter 分布式测试

本文涉及的产品
云防火墙,500元 1000GB
简介: Jmeter系列(39)- Jmeter 分布式测试

如果你想从头学习Jmeter,可以看看这个系列的文章哦

https://www.cnblogs.com/poloyy/category/1746599.html

 

为什么要做分布式


Jmeter 本身的局限性

  • 一台压力机的 Jmeter 默认最大支持 1000 左右的并发用户数(线程数),再大的话,容易造成卡顿、无响应等情况,这是受限于 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 堆内存来满足测试的要求

 

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

 

联想场景

  • 测试 5000 并发的场景,但单机只能支持 1000 并发无法达到 5000
  • 通过分布式(5 台机器起)可以模拟 5000 并发

 

分布式压测

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

 

分布式的最终目的

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

 

分布式原理


image.png

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

  1. Master 是控制机,Slaves 是多个压力机,Target 是被测系统
  2. 分布式测试中,Master 通过命令行将测试脚本分发给所有 Slave
  3. Slave 不需要启动 Jmeter GUI,通过 CLI 模式执行测试
  4. Slave 执行完后,会把结果回传给 Master
  5. Master 收集所有 Slave 的结果并汇总成一个结果集

 

注意

  • 压力机也可以叫:负载机、代理机、执行机、奴隶机、肉鸡....各种各样的名字,但他们都是 Slave
  • Master 也可以执行测试脚本,不执行只负责管理

 

场景类比

  • 一个测试部门有一个部门经理,五个测试小弟
  • 有个巨型测试任务由部门经理划分好模块后分发给五个测试小弟去测试
  • 五个小弟测试完,会各自发送测试报告给部门经理
  • 部门经理把所有测试报告汇总成一份,发给公司大佬看
  • 而部门经理可以参与测试,也可以不参与测试只负责管理部门

 

分布式专用术语认知


image.png


Master

  • 控制机
  • 运行JMeter GUI(控制测试)的机器

 

Slave

  • 压力机
  • 运行 jmeter-server 的机器
  • 它从 GUI 接收命令并将请求发送到目标系统

 

target

需要进行压力测试的 Web 服务器

 

实现分布式的前提条件


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

具体体现在

  • jmeter 版本要一致
  • jdk 主版本要一致(1.7、1.8...)
  • jmeter 脚本中,csv 文件要一致
  • jmeter 的插件要一致
  • 同一局域网,防火墙开放端口

 

jdk 版本一致

看主版本即可

image.png

csv 文件一致

主要是数据和路径要一致

如何保持一致可以参考这篇博客:https://www.cnblogs.com/poloyy/p/13189198.html

 

保证一致性方法

直接将控制机的 jmeter 压缩包移到每个压力机上解压使用

 

压力机配置


注意:压力机系统不限,可以是win、mac、linux

 

前置步骤

将控制机的 jmeter 压缩包发送到压力机,解压

 

修改 jmeter.properties(下面三步走)

进入 bin 目录

修改 server_port 端口

默认1009

可修改任意端口,但不能已被占用的哦

image.png


修改 server.rmi.port 端口

和 server_port 保持一致即可, 默认是会帮你保持一致的

image.png

设置 server.rmi.ssl.disable

默认 false,代表需要认证

设置为 true,减少不必要的麻烦

image.png

启动 jmeter-server 服务

仍然在 bin目录下哦

如果压力机是 linux 或 mac

./jmeter-server -Djava.rmi.server.hostname=压力机ip

 

如果是window

jmeter-server.bat -Djava.rmi.server.hostname=压力机ip

 

检查防火墙

  • 检查防火墙是否被关闭,防火墙会影响脚本执行和测试结构收集
  • 确认 server_port 的端口没有被占用以及需要对外开放,端口占用会导致压力机报错
  • 关于开放端口和关闭防火墙可以参考这篇博客:https://www.cnblogs.com/poloyy/p/12213297.html

 

控制机配置


修改 jmeter.properties(下面三步走)

修改 remote_hosts

image.png

  • 多个压力机之间用 , 隔开
  • 不同压力机端口可以不一样,不需要全部都一致
  • 如果控制机也测试则加 127.0.0.1:port ,然后修改 server_portserver.rmi.port (和压力机一样步骤)

 

设置 server.rmi.ssl.disable

image.png

设置 mode

image.png

  • 用于查看分布式测试过程中,每个压力机的测试结果
  • 若不启用,在运行过程中,控制器是无法实时看到压力机的结果

 

控制机运行分布式测试


启动远程服务器

image.png

这里会显示所有 remote_hosts 添加的压力机

 

点击启动后,查看压力机

image.png

分布式注意事项


  • 如果并发较高,建议将控制机设置为只启动测试脚本和收集汇总测试结果
  • 分布式测试中,如果 1S 发送 100 个模拟请求,有 5 个压力机,那么需要将脚本的线程数设置为 20,否则模拟请求数会变成 500,和预期结果相差太大
  • 只需要修改控制机的脚本,启动压力机之后,压力机执行的就是最新的脚本

 

具体栗子

针对注意事项二,我们来看看栗子

image.png

一共发出了 20 个请求(10*2)

其实这就是分布式的好处,如果需要 1000 个并发用户数,有 10 台压力机,每台压力机只需要满足 100 个并发用户数即可

 

分布式已知局限性


  • 若没有代理,RMI 不能跨子网通信,因此 JMeter 没有代理是不行的
  • 从 2.9 版本开始,JMeter发送所有剥离了响应数据的结果到控制台,这使我们降低了网络IO的影响,确保监控你的网络流量,使得网络不是争议点
  • 在 2-3 GHz 的 CPU 上,单个 JMeter 客户端根据测试的类型,可以处理 1000-2000的线程

 

分布式测试结果图表


分布式测试的前提

共有两个压力机:本机和另一台电脑的虚拟机

线程组结构树

image.png

一共有三个请求,三个监控结果图表

 

线程属性

image.png

10 个线程,持续运行 30s

 

活跃线程图表

image.png

这里可以看到有两条线,分别代表两个压力机的活跃线程数,不是按照接口来分线哦

 

TPS 图表

image.png

三条线代表三个接口的 TPS

 

是否有小伙伴有疑问,为什么这里不是按机器去分捏?

因为不同接口的 TPS 不可能相加的鸭!

 

响应时间图表

image.png

三条线的情况和 TPS 一样哦

 

分布式测试中可能会遇到的问题


缺少 rmi_keystore.jks

这就是上面有提到的证书问题

 

方式一

jmeter.properties  中设置 server.rmi.ssl.disable=true

 

方式二

bin 目录下,执行 create_create-rmi-keystore.sh


image.png

最后会在 bin 目录下生成一个证书


相关文章
|
12天前
|
测试技术 数据库 UED
Python 性能测试进阶之路:JMeter 与 Locust 的强强联合,解锁性能极限
【9月更文挑战第9天】在数字化时代,确保软件系统在高并发场景下的稳定性至关重要。Python 为此提供了丰富的性能测试工具,如 JMeter 和 Locust。JMeter 可模拟复杂请求场景,而 Locust 则能更灵活地模拟真实用户行为。结合两者优势,可全面评估系统性能并优化瓶颈。例如,在电商网站促销期间,通过 JMeter 模拟大量登录请求并用 Locust 模拟用户浏览和购物行为,可有效识别并解决性能问题,从而提升系统稳定性和用户体验。这种组合为性能测试开辟了新道路,助力应对复杂挑战。
34 2
|
7天前
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
|
9天前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
56 7
Jmeter实现WebSocket协议的接口测试方法
|
11天前
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
【9月更文挑战第10天】随着软件应用的不断扩展,性能测试成为确保系统稳定运行的关键环节。本文通过对比Apache JMeter和Locust,探讨了如何在Python环境中利用这两款工具挖掘更多性能测试潜力。JMeter是一款成熟且功能强大的开源工具,支持多种协议,适用于各种应用的测试;而Locust则基于Python,通过简单脚本模拟HTTP请求,更适合Web应用测试。
25 2
|
16天前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
【9月更文挑战第5天】性能测试是确保应用在高负载下稳定运行的关键。本文介绍Apache JMeter和Locust两款常用性能测试工具,帮助识别并解决性能瓶颈。JMeter适用于测试静态和动态资源,而Locust则通过Python脚本模拟HTTP请求。文章详细讲解了安装、配置及使用方法,并提供了实战案例,帮助你掌握性能测试技巧,提升应用性能。通过分析测试结果、模拟并发、检查资源使用情况及代码优化,确保应用在高并发环境下表现优异。
42 5
|
13天前
|
消息中间件 监控 测试技术
惊呆了!Python性能测试高手都用这些神器:JMeter+Locust,效率翻倍📈
【9月更文挑战第8天】在软件开发中,性能测试对确保应用稳定性和高效运行至关重要。对于Python开发者而言,选择合适的性能测试工具能显著提升测试效率并精准定位性能瓶颈。本文深入探讨了JMeter和Locust这两款工具的独特优势。JMeter作为跨平台的性能测试工具,支持多种协议,具备高度可定制性和扩展性;而Locust则专为Python应用设计,利用协程实现高并发,提供实时监控和分布式测试功能。两者结合使用,可在实际项目中实现1+1>2的效果,帮助开发者构建全面高效的测试方案,保障应用稳定运行。
42 1
|
15天前
|
测试技术 Apache 数据库
从慢如蜗牛到飞一般的感觉!Python性能测试实战,JMeter&Locust助你加速🏃‍♂️
【9月更文挑战第6天】你的Python应用是否曾因响应缓慢而让用户望而却步?借助JMeter与Locust,这一切将迎刃而解。JMeter作为Apache基金会的明星项目,以其强大的跨平台和多协议支持能力,成为性能测试领域的魔法师;而Locust则以Python的简洁与高效,让性能测试更加灵活。通过实战演练,你可以利用这两款工具轻松识别并解决性能瓶颈,优化数据库查询、网络配置等,最终使应用变得敏捷高效,轻松应对高并发挑战。
12 1
|
1月前
|
测试技术 持续交付 Apache
深度挖掘:Python性能测试中JMeter与Locust的隐藏技能🔍
【8月更文挑战第5天】随着软件规模扩大,性能测试对系统稳定性至关重要。Apache JMeter和Locust是两大主流工具,各有千秋。本文探索它们在Python环境下的进阶用法,挖掘更多性能测试潜力。JMeter功能强大,支持多种协议,可通过命令行模式执行复杂测试计划,并与Python集成实现动态测试数据生成。Locust基于Python,通过编写简洁脚本模拟HTTP请求,支持自定义请求及与Python库深度集成。掌握这些技巧可实现高度定制化测试场景,有效识别性能瓶颈,提升应用稳定性。
108 1
|
1月前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
【8月更文挑战第5天】性能测试确保应用高负载下稳定运行。Apache JMeter与Locust是两大利器,助力识别解决性能瓶颈。本文介绍这两款工具的应用与优化技巧,并通过实战示例展示性能测试流程。首先,通过JMeter测试静态与动态资源;接着,利用Locust的Python脚本模拟HTTP请求。文中提供安装指南、命令行运行示例与性能优化建议,帮助读者掌握性能测试核心技能。
74 0
|
1月前
|
消息中间件 Java 测试技术
Python性能测试全攻略:JMeter与Locust,双剑合璧斩断性能瓶颈🗡️
【8月更文挑战第4天】在软件开发中,性能至关重要。对Python开发者来说,掌握高效性能测试方法尤为关键。本文将带您探索性能测试工具JMeter与Locust的强大功能。JMeter作为Java世界的巨擘,以其强大功能和灵活性在性能测试领域占有一席之地,不仅适用于Java应用,也能测试Python Web服务。
70 0