运行原理

如果不用工具,要做 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 客户端,等待控制机连接。
  • 控制机连接上远程负载机。
  • 控制机发送指令到远程负载机启动线程。
  • 远程负载机运行脚本,回传结果数据。
  • 控制机收集结果并显示。

远程运行脚本

  1. 远程负载机启动 jmeter-server.bat

  2. 在控制机 bin\JMeter.properties 文件中,找到 remote_hosts,添加远程负载机的 ip 和 port

  3. 多个远程负载机,ip 用逗号分隔,如 remote_hosts=192.168.0.1:1664,192.168.0.2:1664

  4. 1664 是 JMeter 的 Controller 和 Agent 之间进行通讯的默认 RMI 端口号

  5. 在控制机打开 GUI,菜单栏 Run 下执行 Remote 命令,控制远程负载机启动,停止,退出

简要回顾

本文首先简单介绍了多进程和多线程,说明了 JMeter 的运行原理是用多线程模拟多用户。接着讲述了 JMeter 的运行环境,有哪些文件和文件夹,怎么启动 JMeter 运行。打开 JMeter 后,看到一个测试计划,实际上对应着一个 .jmx 测试脚本文件(文本编辑器打开内容是 xml 代码)。最后说明了如何通过远程运行负载机群来扩充负载。

JMeter实战(二) 运行原理的更多相关文章

  1. jmeter之GUI运行原理

    一.一语道破jmeter       大家都知道我们在应用jmeter的图形化界面来进行操作,保存后生成的是一个.jmx文件.     那么这个.jmx文件中都是些什么呢.   <?xml ve ...

  2. 【转】Jmeter之GUI运行原理

    一.一语道破jmeter 大家都知道我们在应用jmeter的图形化界面来进行操作,保存后生成的是一个.jmx文件. 那么这个.jmx文件中都是些什么呢. <?xml version=" ...

  3. JMeter实战(一) 体系结构

    此为开篇,介绍JMeter的组成结构,阅读后对JMeter形成整体认知和初步印象. 为了便于后续讲解,先明确下2个术语. 元件:如HTTP请求.事务控制器.响应断言,就是一个元件. 组件:如逻辑控制器 ...

  4. jmeter的运行原理和测试计划要素

    jmeter运行原理 1.jmeter运行在JVM虚拟机上,jmeter是以线程的方式运行的. 2.jmeter通过线程组来驱动多个线程,运行测试脚本对被测试服务器发起负载,每一个负载机上够可以运行多 ...

  5. Jmeter结构体系及运行原理

    Jmeter结构体系 把Jmeter的结构体系拆分为三维空间,如图: X1~X5:是负载模拟的一个过程,使用这些组件来完成负载的模拟: X1:选择协议,模拟用户请求,检查服务器响应是否正确,然后收集结 ...

  6. 【原创】分布式之数据库和缓存双写一致性方案解析(三) 前端面试送命题(二)-callback,promise,generator,async-await JS的进阶技巧 前端面试送命题(一)-JS三座大山 Nodejs的运行原理-科普篇 优化设计提高sql类数据库的性能 简单理解token机制

    [原创]分布式之数据库和缓存双写一致性方案解析(三)   正文 博主本来觉得,<分布式之数据库和缓存双写一致性方案解析>,一文已经十分清晰.然而这一两天,有人在微信上私聊我,觉得应该要采用 ...

  7. Jmeter运行原理

    Jmeter运行原理: JMETER是运行在JVM虚拟机上的,每个进程的开销比loadrunner的进程开销大,如果以进程的方式来运行每台负载机上的进程数量不会允许太多,当有大量并发时就需要大量的负载 ...

  8. Web自动化必会知识:「Web基础、元素定位、元素操作、Selenium运行原理、项目实战+框架」

    1.web 基础-html.dom 对象.js 基本语法 Dom 对象里面涉及元素定位以及对元素的修改.因为对元素操作当中涉及的一些 js 操作,js 基本语法要会用.得要掌握前端的基本用法.为什么要 ...

  9. 【Java编程实战】Metasploit_Java后门运行原理分析以及实现源码级免杀与JRE精简化

    QQ:3496925334 文章作者:MG1937 CNBLOG博客ID:ALDYS4 未经许可,禁止转载 某日午睡,迷迷糊糊梦到Metasploit里有个Java平台的远控载荷,梦醒后,打开虚拟机, ...

随机推荐

  1. maven问题汇总

    Failed to read artifact descriptor for xxx:jar 在MyEclipse中执行Maven的install命令时,报“Failed to read artifa ...

  2. zookeeper(2) 文件系统

    这一节我们主要来看一下zookeeper文件系统的实现. 树结构 为了提高对指定节点的操作,zookeeper使用一个HashMap来存储树结构数据,key为数据路径,value为节点数据. 树节点( ...

  3. 获取NX一组属性

    NX中的属性是可以分组的,有时我们想获取某一个组下的所有属性,但是NX封装的接口不够好用,因此在此基础上,我封装了一个,供大家参考: 1 //属性值是字符串类型,obj对象tag,category组名 ...

  4. keras中的mask操作

    使用背景 最常见的一种情况, 在NLP问题的句子补全方法中, 按照一定的长度, 对句子进行填补和截取操作. 一般使用keras.preprocessing.sequence包中的pad_sequenc ...

  5. Solr常见异常

    RemoteSolrException: Expected mime type application/octet-stream but got text/html 解决方法: 在使用Tomcat部署 ...

  6. Python练习题 021:递归方法求阶乘

    [Python练习题 021] 利用递归方法求5!. ---------------------------------------------- 首先得弄清楚:5! 指的是"5的阶乘&qu ...

  7. RTThread DFS文件系统使用: 基于使用SFUD驱动的SPI FLASH之上的ELM FATFS文件系统

    参考博文: 博文很长,但是实际要操作的步骤没几下. http://m.elecfans.com/article/730878.html  为了防止几年后文章链接找不到,我把文章复制过来了 /***** ...

  8. LeetCode刷题的一点个人建议和心得

    目录 1.    为什么我们要刷LeetCode? 2.    LeetCode的现状和问题 3.    本文的初衷 4.    LeetCode刷题建议 4.1入门数据结构,打基础阶段 4.2 建立 ...

  9. 011 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 05 变量的三个元素的详细介绍之三—— 变量值——即Java中的“字面值”

    011 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 05 变量的三个元素的详细介绍之三-- 变量值--即Java中的"字面值" 变量值可以是 ...

  10. 【代码审计】PHP代码审计---基础记录

    PHP伪协议 PHP伪协议事实上是其支持的协议与封装协议,支持的种类有以下12种. * file:// - 访问本地文件系统 * http:// - 访问 HTTP(s) 网址 * ftp:// - ...