JMeter实战(二) 运行原理
运行原理
如果不用工具,要做 100 并发的压力测试,得想办法组织 100 个人,每个人操作1台电脑,一声令下,100 个人同时点击,对系统造成 100 并发。现实中,很难找 100 个人和 100 台电脑来做测试。1 个人和 1 台电脑倒是容易得多。有没有办法用 1 个人和 1 台 电脑对系统造成 100 并发?有办法的。电脑是硬件,硬件之上运行着的是软件,最基础的软件是操作系统。操作系统之上运行着的是进程,进程可以打开任务管理器看到

操作系统会把资源分配给进程,进程拿着资源找 CPU 执行。进程挺大的,CPU 看着一堆进程头也大了,告诉进程拆小一点再来找我。进程思来想去,想了个办法,把进程拆成了多个线程。进程把线程拿给 CPU,CPU 一看乐了,这样我就能灵活切换了,哎哟,不错哦。这就是书本上说的,进程是操作系统分配资源的最小单位,线程是程序执行的最小单位。
操作系统有多个进程,进程有多个线程。多进程、多线程,正好可以用来模拟多个用户,对系统造成多个并发。 JMeter、LoadRunner 等压测工具的原理就是基于这个道理来的。LoadRunner 既支持多进程模拟,也支持多线程模拟。JMeter 不同。JMeter 是由 Java 写成的,运行在 JVM 虚拟机上面。进程开销比较大,导致进程的数量有限。如果要增加负载,就只能加机器,这显然不太经济。所以 JMeter 只支持多线程。
JMeter 的运行原理就是用多线程来模拟多用户。
运行环境
JMeter 安装包是绿色版,解压即用,解压后的目录

bin:配置文件、启动文件、启动jar包、示例脚本等。
docs:JMeter API 离线帮助文档。
extras:辅助功能,可以与 Ant、Jenkins 集成。
lib:组件,基础包放在 lib 根目录下,扩展包放在 lib/ext 目录下。
licenses:证书文本文件。
printable_docs:JMeter 离线帮助文档。
LICENSE:证书说明。
NOTICE:版权声明。
README:JMeter 简介。
打开 bin 目录,找到启动文件启动 JMeter,Windows 用 jmeter.bat,Linux 用 jmeter.sh

测试计划
启动后,会打开界面,有 1 个测试计划(TestPlan),JMeter 是基于测试计划来组织和管理的

在 JMeter 中,一个界面只能打开一个测试计划,保存后会生成一个 .jmx 脚本文件,一个测试计划就是一个测试脚本。这意味着测试计划是在这个界面看到的树形结构的根节点,根节点只能有一个,如果要同时打开多个测试计划,需要开多个界面。同时显而易见的是,JMeter 的请求模拟和并发设置都是在测试脚本文件中一起设置的。
JMeter 是用线程来模拟用户的,那么测试计划就必须至少有一个线程组,即使这个线程组只有一个线程。(也可以创建多个线程组,把不相关联的业务分布在不同的线程组,比如让一些用户请求这个接口,一些用户请求那个接口)
而且必须要有一个取样器和一个监听器,模拟用户请求,获取测试结果,否则用 JMeter 就是用了个寂寞,既不发请求,又不看结果,哈哈。以下是简单示例

远程运行
线程创建过多会占用大量系统资源,一般单台机器,性能稍微好点的跑个 500 的并发,内存就比较吃紧了。因为做压力测试,压力机本身不能是性能瓶颈,否则压测就没有意义,所以实际测试成百上千的并发时,单台机器是不够用的,需要考虑用负载机群,也就是用多台负载机分布来模拟并发,如图所示

控制机:管理远程负载机,控制远程负载机脚本运行,收集远程负载机测试结果。控制机本身也是个负载机。
远程负载机:向被测应用系统发起负载。远程负载机首先要启动客户端(Agent: bin 目录下 jmeter-server.bat),才能被控制机接管。如果远程负载机脚本需要参数或依赖jar包,需要使用自动化工具从控制机发送到远程负载机。
远程运行逻辑
- 远程负载机启动 Agent 客户端,等待控制机连接。
- 控制机连接上远程负载机。
- 控制机发送指令到远程负载机启动线程。
- 远程负载机运行脚本,回传结果数据。
- 控制机收集结果并显示。
远程运行脚本
远程负载机启动 jmeter-server.bat
在控制机 bin\JMeter.properties 文件中,找到 remote_hosts,添加远程负载机的 ip 和 port
多个远程负载机,ip 用逗号分隔,如 remote_hosts=192.168.0.1:1664,192.168.0.2:1664
1664 是 JMeter 的 Controller 和 Agent 之间进行通讯的默认 RMI 端口号
在控制机打开 GUI,菜单栏 Run 下执行 Remote 命令,控制远程负载机启动,停止,退出

简要回顾
本文首先简单介绍了多进程和多线程,说明了 JMeter 的运行原理是用多线程模拟多用户。接着讲述了 JMeter 的运行环境,有哪些文件和文件夹,怎么启动 JMeter 运行。打开 JMeter 后,看到一个测试计划,实际上对应着一个 .jmx 测试脚本文件(文本编辑器打开内容是 xml 代码)。最后说明了如何通过远程运行负载机群来扩充负载。
JMeter实战(二) 运行原理的更多相关文章
- jmeter之GUI运行原理
一.一语道破jmeter 大家都知道我们在应用jmeter的图形化界面来进行操作,保存后生成的是一个.jmx文件. 那么这个.jmx文件中都是些什么呢. <?xml ve ...
- 【转】Jmeter之GUI运行原理
一.一语道破jmeter 大家都知道我们在应用jmeter的图形化界面来进行操作,保存后生成的是一个.jmx文件. 那么这个.jmx文件中都是些什么呢. <?xml version=" ...
- JMeter实战(一) 体系结构
此为开篇,介绍JMeter的组成结构,阅读后对JMeter形成整体认知和初步印象. 为了便于后续讲解,先明确下2个术语. 元件:如HTTP请求.事务控制器.响应断言,就是一个元件. 组件:如逻辑控制器 ...
- jmeter的运行原理和测试计划要素
jmeter运行原理 1.jmeter运行在JVM虚拟机上,jmeter是以线程的方式运行的. 2.jmeter通过线程组来驱动多个线程,运行测试脚本对被测试服务器发起负载,每一个负载机上够可以运行多 ...
- Jmeter结构体系及运行原理
Jmeter结构体系 把Jmeter的结构体系拆分为三维空间,如图: X1~X5:是负载模拟的一个过程,使用这些组件来完成负载的模拟: X1:选择协议,模拟用户请求,检查服务器响应是否正确,然后收集结 ...
- 【原创】分布式之数据库和缓存双写一致性方案解析(三) 前端面试送命题(二)-callback,promise,generator,async-await JS的进阶技巧 前端面试送命题(一)-JS三座大山 Nodejs的运行原理-科普篇 优化设计提高sql类数据库的性能 简单理解token机制
[原创]分布式之数据库和缓存双写一致性方案解析(三) 正文 博主本来觉得,<分布式之数据库和缓存双写一致性方案解析>,一文已经十分清晰.然而这一两天,有人在微信上私聊我,觉得应该要采用 ...
- Jmeter运行原理
Jmeter运行原理: JMETER是运行在JVM虚拟机上的,每个进程的开销比loadrunner的进程开销大,如果以进程的方式来运行每台负载机上的进程数量不会允许太多,当有大量并发时就需要大量的负载 ...
- Web自动化必会知识:「Web基础、元素定位、元素操作、Selenium运行原理、项目实战+框架」
1.web 基础-html.dom 对象.js 基本语法 Dom 对象里面涉及元素定位以及对元素的修改.因为对元素操作当中涉及的一些 js 操作,js 基本语法要会用.得要掌握前端的基本用法.为什么要 ...
- 【Java编程实战】Metasploit_Java后门运行原理分析以及实现源码级免杀与JRE精简化
QQ:3496925334 文章作者:MG1937 CNBLOG博客ID:ALDYS4 未经许可,禁止转载 某日午睡,迷迷糊糊梦到Metasploit里有个Java平台的远控载荷,梦醒后,打开虚拟机, ...
随机推荐
- java虚拟机之性能监控与故障处理工具
sun jdk性能监控与故障处理工具 jps: 可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一id. jstat: 用于监视虚拟机各种运行状态信息的命令航工具.它可 ...
- rest_framework五大模块
面向对象封装 面向对象封装导入 # 1.将子类共有的方法抽离形成父类方法 # 2.子类使用共有方法,使用的是父类方法 # 3.共有方法中的资源,在子类使用方法时,获取的是子类资源 class MyCl ...
- PYG2010-01-软件破解意义和程序流程简介笔记
- 井字棋小游戏(C语言)
最近沉迷于<NetHack>.<DCSS>等字符游戏,对其很感兴趣,于是用C语言写了个字符界面的井字棋小游戏.欢迎大家指教. 编写时遇到了一些问题,我原先准备用循环,直到读取到 ...
- 02 ArcPython的使用大纲
一.什么情况下使用ArcPython? 1.现有工具实现不了,可以用python 2.流程化需要时,可以使用python 3.没有AE等二次开发环境 4.其他特殊场景 二.ArcPython在ArcG ...
- c++中 预编译头文件PCH
转载:https://blog.csdn.net/lovemysea/article/details/74858430 一.预编译头文件使用经验: 如果预编译头文件被正确使用时,它确实大大提高我们编程 ...
- ATMEGA的SPI总线 - 第2部分
参考: 1.https://www.yiboard.com/thread-783-1-1.html 2.https://mansfield-devine.com/speculatrix/2018/01 ...
- 安装、验证安装 Oracle Database XE 11gR2
操作系统:Windows 10 x64 第一节:下载 Oracle Database XE 11gR2 第二节:安装.验证安装 Oracle Database XE 11gR2 第三节:Oracle ...
- Flutter 1.22 正式发布
支持iOS 14和Android 11,新的i18n和l10n支持,可用于生产的Google Maps和WebView插件,新的App Size工具等等! 作者:Chris Sells 原文:http ...
- 01 . OpenResty简介部署,优缺点,压测,适用场景及用Lua实现服务灰度发布
简介 OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库.第三方模块以及大多数的依赖项.用于方便地搭建能够处理超高并发.扩展性极高的动态 ...