JMeterJMeter的工作原理
Posted sysu_lluozh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JMeterJMeter的工作原理相关的知识,希望对你有一定的参考价值。
一、JMeter简介
JMeter是Apache组织开发的基于Java的开源的压力测试工具、接口测试工具
可以模拟高并发和多次循环的测试场景,能够对HTTP和FTP服务器进行压力和性能测试, 也可以对任何数据库进行同样的测试,具有可移植性
二、压测的原理
性能测试的核心三原则: 基于协议,多线程,场景模拟
- 基于协议
基于应用层和传输层的各种协议,比如http、udp、ftp和tcp等 - 多线程
通过进程下启动线程的方式来模拟并发用户实现负载 - 场景模拟
通过模拟用户使用的真实场景,来提高性能测试的准确性
JMeter压测的核心原理
基于各种协议,通过多线程的方式来模拟并发用户,设计各种场景来模拟真实的用户负载
三、JMeter执行原理
3.1 压力的定义
所谓压力,其实就是单位时间内向服务器发起的请求数
jmeter在设计压力模式的时候,引入了两层概念:
- 第一是线程
- 第二是迭代
一个人在单位时间内,可能发起一次请求,也可能发起多次,那么JMeter就通过线程*迭代,来模拟单位时间内用户多次发起请求的场景
把单位时间内线程*迭代的次数称之为压力
3.2 执行原理
3.2.1 为何选择线程模拟
操作系统有多个进程,进程有多个线程。多进程、多线程,正好可以用来模拟多个用户,对系统造成多个并发。JMeter、LoadRunner等压测工具的原理就是基于原理
-
LoadRunner
LoadRunner既支持多进程模拟,也支持多线程模拟 -
JMeter
JMeter由Java实现,运行在JVM虚拟机上,每个进程的开销比loadrunner的进程开销大,如果以进程的方式来运行每台负载机上的进程数量不会允许太多,当有大量并发时就需要大量的负载机,JMeter选择了以线程方式来运行
3.2.2 执行逻辑
JMeter运行在java虚拟机上的,基本原理是建立一个线程池,通过线程组驱动多线程,多线程运行sampler产生负载,在运行过程中通过断言来验证结果的正确性,可以通过添加监听器(聚合报告、图形结果和查看结果树等)来记录测试结果
3.2.3 使用说明
- 如果取样器中有参数化需求,可以通过配置元件或者前置处理器来完成
- 如果取样器中有关联需求,可以通过后置处理器来完成
- 如果要模拟负载场景,比如模拟多少用户,运动多长时间,可以通过线程组完成
- 如果要模拟并发场景,可以通过定时器来完成(一般不不需要设置,定时器绝对并发这种场景有点不太符合实际业务场景)
- 如果要控制业务的执行逻辑,比如登录只运行一次,可以通过控制器来完成
3.2.4 执行模式
JMeter运行场景不仅可以再gui方式中完成,还可以运行命令行,而且命令行的运行方式对于负载机的资源消耗会更小
四、远程运行
线程创建过多会占用大量系统资源,一般单台机器性能稍微好点的跑500的并发,内存就比较吃紧
压力测试时,压力机本身并不应该成为性能瓶颈,否则压测就没有意义,所以实际测试成百上千的并发时,单台机器显然不够,需要考虑用负载机群,即用多台负载机分布来模拟并发,如图所示
4.1 控制机
管理远程负载机,控制远程负载机脚本运行,收集远程负载机测试结果。控制机本身也是个负载机
4.2 负载机
向被测应用系统发起负载
远程负载机首先要启动客户端(Agent: bin 目录下 jmeter-server.bat),才能被控制机接管
如果远程负载机脚本需要参数或依赖jar包,需要使用自动化工具从控制机发送到远程负载机
4.3 远程运行逻辑
- 远程负载机启动 Agent 客户端,等待控制机连接
- 控制机连接上远程负载机
- 控制机发送指令到远程负载机启动线程
- 远程负载机运行脚本,回传结果数据
- 控制机收集结果并显示
4.4 远程运行脚本
- 远程负载机启动 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命令,控制远程负载机启动,停止,退出
远程方法调用(Remote Method Invocation ,RMI)
使用户能访问在另一主机上的Java对象,并远程调用其方法
程序的对象是客户,而远程对象是服务器。远程对象也可以是另一个远程服务对象的客户
通过使用持续性(串行化和解串行化),本地对象和原始类型值可以作为参数传递给远程对象。这种方式允许Java程序可以利用分布式计算将工作量分散到多个Java虚拟机上
五、JMeter目录
JMeter 安装包是绿色版,解压即用,解压后的目录
- bin:配置文件、启动文件、启动jar包、示例脚本等
- docs:JMeter API离线帮助文档
- extras:辅助功能,可以与Ant、Jenkins集成
- lib:组件,基础包放在 lib 根目录下,扩展包放在 lib/ext 目录下
- licenses:证书文本文件
- printable_docs:JMeter 离线帮助文档
- LICENSE:证书说明
- NOTICE:版权声明
- README:JMeter简介
以上是关于JMeterJMeter的工作原理的主要内容,如果未能解决你的问题,请参考以下文章