Jmeter中一些概念的理解——90%响应时间、事务、并发
一、90%响应时间(参考虫师博客)
90%Line
一组数由小到大进行排列,找到他的第90%个数(假如是12),那么这个数组中有90%的数将小于等于12 。
用在性能测试的响应时间,也就是90%请求响应时间不会超过12 秒。
例如:
某一次测试结果,每个sample的响应时间分别是:1、3、4、9、2、8、5、7、6、10,将其按由小到大将其排列为:
1、2、3、4、5、6、7、8、9、10
那么它的第90%百分位,也就是第9个数刚好是9 ,那么他的90%Line 就是9 。即90%响应时间是9ms,理解为:90%的用户请求时间不冲9ms。
另一测试结果,20个sample,响应时间分别为:
2、2.1、2.5、3、3.4、3.4、4、4、4、4、5、5、5、5.9、5.91、6.8、8、12、24、24.1 按由小到大将其排列。
求它的第90%百分位,第18个数是12 么,他的90%Line 就是12。
二、事务
1、事务的组织
计算机术语中,事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
在性能测试脚本设计中,事务的设置至少应该遵守原子性,即不可分割性。
如购物事务一般包括登录、查找商品、查看商品详情、加入购物车、结算几个步骤,每个步骤都缺一不可;
又比如转账业务(A账户向B账户转出50元),包括A账户-50元、B账户+50元两个步骤,每个步骤缺一不可。
再比如百度搜索,包括两步:打开百度首页,输入关键字搜索,两个步骤组成一个搜索事务。
常用的场景
1、事务=单个请求
2、事务=思考时间+单个请求
3、事务=多个相关联的请求
如果事务中增加思考时间,运行结果统计的事务响应时间是包括思考时间的,所有场景的设计,脚本的设置,对测试结果是有影响的,具体需要根据需求进行设计。
2、项目举例
项目一
需求:测试一个系统的TPS
分析:该系统包含多个功能点,选择主要的功能点进行压测
设计:每个功能点设计为一个事务,每个事务包含N个请求,通过脚本描述。
项目二
需求:有一个接口,用于跟踪用户行为,一旦用户登录就上传用户的登录时间。要求:测试一下性能看能撑多少用户同时在线。
分析:单个接口(请求)无需事务概念
项目三
需求:测试一下某个电商系统能同时支持多少用户下单并购买成功
分析:业务是下单并购买,包含多个请求,需要组织成事务
三、TPS
1、TPS、TPM、QPS、PV
pv 是指页面被浏览的次数,比如你打开一网页,那么这个网站的pv就算加了一次;
tps是每秒内的事务数,比如执行了dml操作,那么相应的tps会增加;
tpm是每分钟的事务数。
qps是指每秒内查询次数,比如执行了select操作,相应的qps会增加。
不同的应用系统tps,qps是没有可对比性的。
例如:
应用A,每个select查询需要1ms, 一个connection的话,一直不停的执行,1S内 可执行1000次,也就是1000qps
应用B,每个select查询需要100ms, 一个connection的话,一直不停的执行,1S内 可执行10次,也就是10qps
上面不同系统的两个qps是无法对比的,不能说哪个好哪个坏。
2、TPS的作用
例一
3、常用的应用场景
tps常常是有限制的,如cpu<80%,内存<60%时的tps
cpu使用率和内存占用率往往是默认的或取经验值
CPU | 内存 | 用户数 | tps | 策略 |
已知 | 已知 | 已知 | ? | 按指定用户数,设置释放策略,持续较长时间(30分钟),监控CPU、内存,取平均tps |
默认 | 默认 | ? | 已知 | 持续加压(增加用户数)看何时能达到目标tps,同时监控系统资源 |
经验值 | 经验值 | ? | ? | 什么都不知道的情况下,cpu、内存取经验值,持续加压,看系统的最大tps |
? | ? | 不用太多 | ? | 稳定性测试,用户不用太大,长时间运行(永远),监控cpu、内存、tps |
容量测试:一般可设置运行1小时
压力测试:一般可设置10分钟
稳定测试:7*24小时、5*24小时
很不明确的需求:一般测试最大TPS
4、常见问题
如果某一次测出的TPS非常小,怎么办?
可能的原因
1)服务器处理能力本如此
2)负载机的用户数没发出去,如给10个用户,只发了3个用户。如果是这种情况,可以用siege试一下
3)如果这时的CPU和内存占用也很小,可能是网卡满了
5、性能调优的本质
- 拿时间换空间
- 拿空间换时间
时间:响应时间
空间:缓存
三、并发
1、并发量怎么理解
测试计划包三个线程组,分别如下:
线程组1:线程数200,Ramp-Up Perios200秒——每秒并发1
线程组2:线程数200,Ramp-Up Perios100秒——每秒并发2
线程组3:线程数200,Ramp-Up Perios10秒——每秒并发200
测试计划运行时是同时运行的,无delay。
并发分析
前10秒:200+1+2=203
10秒到100秒:1+2=3
最后100秒:1
第0秒:user1被创建,执行所有的samples用了10s,并发1
第1秒:user2被创建,执行所有的samples用了10s,并发2(user1+user2)
...
0秒——10秒,并发量递增1.2.3....10
第10秒:user1执行完退出,user11被创建,并发量10
第11秒:user2执行完退出,user12被创建,并发量10
...
10秒——200秒,并发量稳定保持在10
所以,一个用户的存活时间可以影响并发。jmeter报告中一般会有一个平均并发数
2、实际案例
某场景要求:100个用户,希望每秒并发数是100。该怎么做?
(1)100用户,20s释放,逐渐加压
(2)用户创建后不让其退出,循环次数设置为永远
(3)这样第20秒时,肯定能达到100并发,更加精确。
所以如果要精确控制并发量的话,建议thread不退出(永远循环),通过调度器设置运行时间。
Jmeter中一些概念的理解——90%响应时间、事务、并发的更多相关文章
- struts2开发中一些概念的理解
对象关系映射(orm)中的两个概念 VO 和 PO: 它们都包含一些属性及这些属性的get/set方法 1.VO:是值对象,可以理解为业务对象,存活在业务层,供业务逻辑使用,当前业务逻辑需要一组什么数 ...
- k8s中几个基本概念的理解,pod,service,deployment,ingress的使用场景
k8s 总体概览 前言 Pod 副本控制器(Replication Controller,RC) 副本集(Replica Set,RS) 部署(Deployment) 服务(Service) ingr ...
- Jmeter中的几个重要测试指标释义
一.基本概念 1.测试计划是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器. 2.线程组:代表一定数量的并发用户,它可以用来模拟并发用户发送请求.实际的请求内容在Sampl ...
- 转帖Jmeter中的几个重要测试指标释义
Aggregate Report 是 JMeter 常用的一个 Listener,中文被翻译为“聚合报告”.今天再次有同行问到这个报告中的各项数据表示什么意思,顺便在这里公布一下,以备大家查阅. 如果 ...
- jmeter中测试接口
本文主要介绍在jmeter中测试接口:主要从以下几个方面进行说明: 1.jmeter简介 2.jmeter怎么做接口测试 3.jmeter进行参数化的几种形式 4.jmeter中处理乱码方法 5.jm ...
- 16 jmeter中的监听器以及测试结果分析
常用监听器 断言结果.查看结果树.聚合报告.Summary Report.用表格查看结果.图形结果.aggregate graph等 指标分析 -Samples:本次场景中一共完成了多少请求-Aver ...
- 转 16 jmeter中的监听器以及测试结果分析
16 jmeter中的监听器以及测试结果分析 常用监听器 断言结果.查看结果树.聚合报告.Summary Report.用表格查看结果.图形结果.aggregate graph等 指标分析 -Sa ...
- atitit.闭包的概念与理解attilax总结v2 qb18.doc
atitit.闭包的概念与理解attilax总结v2 qb18.doc 1.1. 闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数.1 2. #---- ...
- javascript中concat方法深入理解
最近在恶补js知识的时候,总是会因为js强大的语法而感到震撼.因为以前对前端方面的疏忽,导致了一些理解的错误.因此痛改前非,下定决心,不管做什么事情,都要有专研的精神. 在介绍前,抛出一个问题:如何将 ...
随机推荐
- pg_hba.conf、pool_hba.conf 以及 pool_passwd 三者间的关系
pg_hba.conf.pool_hba.conf 以及 pool_passwd 三者间的关系: 1.pg_hba.conf.pool_hba.conf 以及 pool_passwd 三者关系 pg_ ...
- ios实现分发下载
背景:原来公司Jenkins打包后的ipa和apk都是通过第三方的平台托管,手动上传,然后去扫二维码下载.虽然第三方平台有Jenkins插件来直接上传到该平台,但是想自己进行管理.所以就自己来做安装包 ...
- go_gc
如果想知道当前的内存状态,可以使用: // fmt.Printf("%d\n", runtime.MemStats.Alloc/1024) // 此处代码在 Go 1.5.1下不再 ...
- c语言伪常量const理解
const是伪常量,无法用于数组的初始化和全局变量的初始化,本质就是限定一个变量不能直接赋值. 如以下代码: #define A 10 int arr[A]; //const本质,伪常量 ,无法用于数 ...
- cmake 查看配置选项
cmake 查看配置选项可以用如下命令 cmake . -LH 查看help > cmake -h cmake version 2.6-patch 4 Usage cmake [optio ...
- SSM整合中每一框架需要做的基本操作简述
1.dao层的工作 pojo和映射文件以及接口(使用逆向工程) SqlMapConfig.xml(Mybaits核心配置文件) ApplicationContext-dao.xml 整合后Sprin ...
- 基于 EntityFramework 的数据库主从读写分离服务插件
基于 EntityFramework 的数据库主从读写分离服务插件 1. 版本信息和源码 1.1 版本信息 v1.01 beta(2015-04-07),基于 EF 6.1 开发,支持 EF 6.1 ...
- spring定时任务执行两次的原因与解决方法
spring定时任务,本地执行一次,放到服务器上后,每次执行时会执行两次,原因及解决办法. http://blog.csdn.net/yaobengen/article/details/7031266 ...
- [C#] == VS Equals
声明:本篇博客翻译自:https://www.codeproject.com/Articles/1111680/equalsequals-VS-Equals-in-Csharp 由于水平(技术水平+英 ...
- 如何用Python实现常见机器学习算法-2
二.逻辑回归 1.代价函数 可以将上式综合起来为: 其中: 为什么不用线性回归的代价函数表示呢?因为线性回归的代价函数可能是非凸的,对于分类问题,使用梯度下降很难得到最小值,上面的代价函数是凸函数的图 ...