loadrunner 场景设计-学习笔记之性能误区
场景设计-学习笔记之性能误区
by:授客 QQ:1033553122
场景假设:
每个事务仅包含一次请求,执行10000个并发用户数
性能误区:
每秒并发用户数=每秒向服务器提交请求数
详细解答:
每秒并发用户数,是从客户端的视角定义的,而每秒请求数,是从服务器的视角定义的。
请求,从客户端-->网络-->服务器,中间的数据传递是需要时间的,所以10000个并发用户不一定同时到达服务器端,即每秒并发用户数 != 每秒并发请求数
此外,如果服务端接收到的请求数太多,超过请求队列的长度,服务器忙不过来,那么超过的部分将驻留在服务器的线程中,这部分的请求是不会对服务器端产生真正的负载,所以,每秒并发用户数 != 每秒并发请求数。
由此可知,常见的类似“服务器支持10000个并发用户”的性能需求,是从客户端的视角定义的,本身就存在一定的不合理性。反过来,从服务器的视角来定义性能需求--“服务器每秒能处理10000个并发请求”,似乎就比较合理了,现在的问题是:怎么样才能达到这个目的呢?
答案显而易见,增加客户端每秒并发用户数,比如15000(假定服务器能够处理这么多),这样同时到达服务器的请求数就可能达到10000个/秒。
而通常,我们期望测试结果能提供一个相对稳定的每秒请求数(RPS),要实现这个目的,得依赖持续不断的请求,所以,一般情况下,我们会对场景设置一个持续运行时间(在这个时间段内进行多次迭代),通过事务 (transaction) 的取样平均值来保证测试结果的准确性。
每个虚拟用户都在接收到来自服务响应后,下一次迭代中,重新发起新的请求,这样一来,多次的反复迭代运行可能会造成上述说的,请求数大于请求队列容量。
而我们知道,http本身是基于tcp连接的,而tcp连接又是同步协议,所以,对于每个虚拟用户来说,仅当每一个发到服务器的请求得到响应之后,才会发送下一次请求。而此时,服务器正处于忙碌的状态,一时间无法处理所有请求,这样一来,客户端接收到请求响应消息的时间间隔变长,甚至超时失败。
关键的是,当客户端请求发送出去后,LoadRunner就开始启动计时器,计算响应时间,直到它收到服务器端的响应为止。这样,得出的测试结果可能是:事务平均响应时间很长,最小响应时间与最大响应时间的差距很大,此时的平均响应时间,也就失去了它应有的意义。也就是说,由于客户端发送的请求太快而导致影响了实际的测量结果。
为了解决这个问题,我们可以在每两个事务请求之间插入一个思考时间,这将会降低单个用户启动请求的速度。间歇会减少请求在线程中驻留的时间,从而提供更符合现实的响应时间。
最后:
虽然性能测试通常都是从客户端活动的角度定义的,但是它们应该以服务器为中心的视角来看待。
loadrunner 场景设计-学习笔记之性能误区的更多相关文章
- UI设计学习笔记(7-12)
UI学习笔记(7)--扁平化图标 认识扁平化 Flat Design 抛弃传统的渐变.阴影.高光等拟真视觉效果,打造看上去更平的界面.(颜色.形状) 扁平化图标有什么优缺点 优点: 简约不简单.有新鲜 ...
- DirectX 9 UI三种设计学习笔记:文章4章Introducing DirectInput+文章5章Wrapping Direct3D
本文从哈利_创.转载请注明出处.有问题欢迎联系本人! 邮箱:2024958085@qq.com 上一期的地址: DX 9 UI设计学习笔记之二 第4章 Introducin ...
- loadrunner 场景设计-手工场景方案(Schedule)设计 Part 2
loadrunner 场景设计-手工场景方案(Schedule)设计 Part 2 ---------------------------接Part 1------------------------ ...
- loadrunner 场景设计-手工场景方案(Schedule)设计 Part 1
参考:http://blog.sina.com.cn/s/articlelist_5314188213_1_1.html loadrunner 场景设计-手工场景方案(Schedule)设计 Part ...
- loadrunner 场景设计-设计与实践
场景设计-设计与实践 by:授客 QQ:1033553122 以lr 11.0 自带Web Tours为例,进行以下测试 说明:以下测试仅供演示,学习设计思路 A.确定系统组件 简单B/S架构:Cli ...
- loadrunner 场景设计-制定负载测试计划
by:授客 QQ:1033553122 场景设计-制定负载测试计划 步骤1.分析应用程序 你应该对硬件和软件组建,系统配置和典型的使用场景很熟悉.这些应用程序的分析保证你在使用loadrunner进行 ...
- loadrunner 场景设计-负载生成器管理
场景设计-负载生成器管理 by:授客 QQ:1033553122 1 简介 当执行一个场景时,Controller把场景中的每个用户配到负载生成器(Load generator). 所谓的负载生成器 ...
- loadrunner 场景设计-手工场景设计
场景设计-手工场景设计 by:授客 QQ:1033553122 概述 通过选择需要运行的脚本,分配运行脚本的负载生成器,在脚本中分配Vuser来建立手工场景 手工场景就是自行设置虚拟用户的变化,主要是 ...
- loadrunner 场景设计-手工场景设计
概述 通过选择需要运行的脚本,分配运行脚本的负载生成器,在脚本中分配Vuser来建立手工场景 手工场景就是自行设置虚拟用户的变化,主页是通过设计用户的添加和减少过程,来模拟真实的用户请求模型,完成负载 ...
随机推荐
- 本地调用QQ只需要一句代码
如下图:点击在线客服以后,弹出QQ登录框 经测试,如果已经登录QQ,可能会提示版本不支持该功能,让你升级,但并不一定就是说你QQ版本需要更新,只是因为你QQ已经登录 有的浏览器可能因为出于安全考虑,会 ...
- tar与压缩详解
.gz gzip gunzip(gzip -d) .zip .rar .bz2 gzip压缩文件不保留原文件 , 不能压缩目录 gzip filename.x 用gzip压缩文件 gun ...
- 带你入门Python爬虫,8个常用爬虫技巧盘点
python作为一门高级编程语言,它的定位是优雅.明确和简单. 我学用python差不多一年时间了, 用得最多的还是各类爬虫脚本, 写过抓代理本机验证的脚本.写过论坛中自动登录自动发贴的脚本 写过自动 ...
- Spark基础脚本入门实践3:Pair RDD开发
Pair RDD转化操作 val rdd = sc.parallelize(List((1,2),(3,4),(3,6))) //reduceByKey,通过key来做合并val r1 = rdd.r ...
- Thread,ThreadPool,Task, 到async await 的基本使用方法和理解
很久以前的一个面试场景: 面试官:说说你对JavaScript闭包的理解吧? 我:嗯,平时都是前端工程师在写JS,我们一般只管写后端代码. 面试官:你是后端程序员啊,好吧,那问问你多线程编程的问题吧. ...
- oracle笔记--查询10条之后记录的数据
本文版权归 远方的风lyh和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 由于之前一直在用mysql 对于oracle 的一些语法不太了解,自己有一次去面试让写一个oracle ...
- Java中锁分类
锁的分类大致如下:公平锁/非公平锁可重入锁/不可重入锁独享锁/共享锁乐观锁/悲观锁分段锁 1.公平锁/非公平锁公平锁就是严格按照线程启动的顺序来执行的,不允许其他线程插队执行的:而非公平锁是允许插队的 ...
- java 判断两个时间段是否有交集
/* 开始时间 */ Date leftStartDate = feesPreferential.getPreferentialStartTime(); /* 结束时间 */ Date leftEnd ...
- Django 学习笔记(二) --- HTML 模版
人生苦短 ~ Tips:仅适用于 Python 3+(反正差别不大,py2 改改也能用).因为据 Python 之父 Guido van Rossum 说会在 2020 年停止对 Python 2 的 ...
- 使用Asp.Net Core MVC 开发项目实践[第五篇:缓存的使用]
项目中我们常常会碰到一些数据,需要高频率用到但是又不会频繁变动的这类,我们就可以使用缓存把这些数据缓存起来(比如说本项目的导航数据,帖子频道数据). 我们项目中常用到有Asp.Net Core 本身提 ...