运行原理

如果不用工具,要做 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. RabbitMQ安装、集群搭建、概念解析

    RabbitMQ安装.集群搭建.概念解析 基本概念 为什么会产生MQ 1.解耦:采用异步方式实现业务需求达到解耦的目的. 2.缓冲流量,削峰填谷: 问:为什么会有流量冲击? 答:采用"直接调 ...

  2. Unity 自己使用顶点描绘圆形UI图片

    2020-09-10 在游戏的UI中,圆形图片的需求是很高的,但是,在Unity中想要实现圆形UI,一般的做法是是使用圆形Mask(遮罩),但是使用Mask的缺点很明显,主要有三点: 1.比较麻烦,使 ...

  3. 吴恩达-机器学习+Logistic回归分类方案

  4. PHP数据库驱动扩展概述与不同方式连接数据库总结

    Author:极客小俊 一个专注于web技术的80后 我不用拼过聪明人,我只需要拼过那些懒人 我就一定会超越大部分人! CSDN@极客小俊,CSDN官方首发原创文章 个人博客: cnblogs.com ...

  5. Leetcode-递归&分治

    50. Pow(x, n) https://leetcode-cn.com/problems/powx-n/ 实现 pow(x, n) ,即计算 x 的 n 次幂函数. 说明: -100.0 < ...

  6. Python练习题 022:用递归函数反转字符串

    [Python练习题 022] 利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来. --------------------------------------- 又来一个递归题!不过,有 ...

  7. MDK内的KEEP关键字以及$$Base $$Limit

    使用mdk编程,假如有一个有用的函数你定义了但是没有显式的调用,mdk在默认方式下,将会把这个函数从整个程序总删除掉,以节省ROM. 比如,你在ROM的0x00002000处定位了一个函数,假设为vo ...

  8. __declspec(dllexport)和__declspec(dllimport) (——declspec方法创建dll的方法已验证ok)

    转载:https://www.cnblogs.com/chengbing2011/p/4084125.html __declspec(dllimport)和__declspec(dllexport)经 ...

  9. #ifndef, #define, #endif三者的作用

    #ifndef, #define, #endif 作用   #ifndef 它是if not define 的简写,是宏定义的一种,实际上确切的说,这应该是预处理功能三种(宏定义.文件包含.条件编译) ...

  10. 【题解】[USACO12MAR]Cows in a Skyscraper G

    题目链接 题目大意:给定一个集合\(S\),给一个限制条件\(P\),要求划分集合,使得每一个子集\(A\in S\),\(A\)满足限制条件\(P\),且划分总数最小. 注意到数据范围\(n< ...