本文是《LoadRunner没有告诉你的》系列文章的第四篇,在这篇短文中,我将尽可能用简洁清晰的文字写下我对“性能”的看法,并澄清几个容易混淆的概念,帮助大家更好的理解“性能”的含义。

如何评价性能的优劣用户视角 vs. 系统视角

对于最终用户(End-User)来说,评价系统的性能好坏只有一个字——“快”。最终用户并不需要关心系统当前的状态——即使系统这时正在处理着成千上万的请求,对于用户来说,由他所发出的这个请求是他唯一需要关心的,系统对用户请求的响应速度决定了用户对系统性能的评价

而对于系统的运营商和开发商来说,期望的是能够让尽可能多的用户在任意时刻都拥有最好的体验,这就要确保系统能够在同一时间内处理更多的用户请求。正如在《理发店模型》一文中所描述的:系统的负载(并发用户数)与吞吐量(每秒事务数)、响应时间以及资源利用率(包括软硬件资源)之间存在着一个“此消彼长”的关系。因此,从系统的运营商和开发商的角度来看,所谓的“性能”是一个整体的概念,是系统的负载与吞吐量、可接受的响应时间以及资源利用率之间的平衡

换句话说,“好的性能”意味着更大的最佳并发用户数(The Optimum Number of Concurrent Users)和 最大并发用户数(The Maximum Number of Concurrent Users。有关“最佳/最大并发用户数”的概念请参见《理发店模型》一文

另外,从系统的视角来看,所需要关注的还包括三个与“性能”有关的属性:可靠性(Reliability可伸缩性(Scalability和 可恢复性(Recoverability——我将会在本系列文章的第五篇“无处不在的性能测试”中专门讨论这三个属性的含义和相关的实践经验。

响应时间

上面这张图引自段念兄的一份讲义,不过我略作了些修改。从图中我们可以清楚的看到一个请求的响应时间是由几部分时间组成的,包括

C1:用户请求发出前在客户端需要完成的预处理所需要的时间;

C2:客户端收到服务器返回的响应后,对数据进行处理并呈现所需要的时间;

A1:Web/App Server 对请求进行处理所需要的时间;

A2:DB Server 对请求进行处理所需的时间;

A3:Web/App Server 对 DB Server 返回的结果进行处理所需的时间;

N1:请求由客户端发出并达到Web/App Server 所需要的时间;

N2:如果需要进行数据库相关的操作,由Web/App Server 将请求发送至DB Server 所需要的时间;

N3:DB Server 完成处理并将结果返回Web/App Server 所需的时间;

N4:Web/App Server 完成处理并将结果返回给客户端所需的时间;

从用户的角度来看,响应时间=(C1+C2)+(A1+A2+A3)+(N1+N2+N3+N4);但是从系统的角度来看,响应时间只包括(A1+A2+A3)+(N1+N2+N3+N4)。

在理解了响应时间的组成之后,可以帮助我们通过对响应时间的分析来更好的识别和定位系统的性能瓶颈。

吞吐量 vs. 吞吐量

在不同的测试工具中,对于吞吐量(Throughput)会有不同的解释。例如,在LoadRunner中,这个指标是以字节数为单位来衡量网络吞吐量的,而在JMeter中则是以事务数/秒为单位来衡量系统的响应能力的。不过在大多数英文的性能测试方面的书籍或资料中,吞吐量的定义使用的是后者。

并发用户数  每秒请求数

这是两个容易让初学者混淆的概念。

简单说,当你在性能测试工具或者脚本中设置了100并发用户数后,并不能期望着一定会有每秒100个请求发给服务器。事实上,对于一个虚拟用户来说,每秒发出多少请求只跟服务器返回响应的速度有关。如果虚拟用户在0.5秒内就收到了响应,那么它会立即发出第二个请求;而如果要一直等待3秒才能得到响应,它将会一直等到收到响应后才发出第二个请求。也就是说,并发用户数的设置只是保证服务器在任一时刻都有100个请求需要处理,而并不一定是保证每秒中发送100个请求给服务器。

所以,只有当响应时间恰好是1秒时,并发用户数才会等于每秒请求数;否则,每秒请求数可能大于并发用户数或小于并发用户数。

转载于:https://www.cnblogs.com/hcat/p/3967378.html

《LoadRunner 没有告诉你的》之四——理解性能相关推荐

  1. loadrunner没有告诉你的

    1.        LoadRunner之-Block l  如何在一个脚本中实现不同事务不同次数的循环呢? l  案例:假如你想在一个脚本中,实现登录执行1次,查询执行2次,插入执行3次,怎么办?录 ...

  2. 无所不在的性能测试——《LoadRunner 没有告诉你的》之五

    无所不在的性能测试--<LoadRunner 没有告诉你的>之五 提到性能测试,相信大家可以在网上找到很多种不同的定义.解释以及分类方法.不过归根结底,在大多数情况下,我们所要做的性能测试 ...

  3. 理解性能的奥秘——应用程序中慢,SSMS中快(4)——收集解决参数嗅探问题的信息

    本文属于<理解性能的奥秘--应用程序中慢,SSMS中快>系列 接上文:理解性能的奥秘--应用程序中慢,SSMS中快(3)--不总是参数嗅探的错 前面已经提到过关于存储过程在SSMS中运行很 ...

  4. 十一.四轮车驱动开发之四:理解直流电机PID控制器

    这是"四轮车驱动控制"系列,分多个小节来介绍: 1. 八.四轮车驱动开发之一:正/逆向运动学分析 2. 九.四轮车驱动开发之二: 配置PWM驱动直流电机 3. 十.四轮车驱动开发之 ...

  5. 麒麟980能运行Linux吗,小迪来告诉你,麒麟980性能到底有多强

    原标题:小迪来告诉你,麒麟980性能到底有多强 就在8月31日,华为在IFA 2018德国柏林国际电子消费展会中正式发布了新一代旗舰级移动SoC--麒麟980. 华为深耕芯片市场多年,在研发上的投入是 ...

  6. Loadrunner之关联——用小故事理解

    希望这个小故事可以帮助大家理解Loadrunner中关联这一概念. 从前有一个王子和一个巫婆,王子的王国里有一个宝库,必须要用王子的声音才能打开.巫婆一直觊觎着王子的宝库.于是有一天,她就悄悄地跟在王 ...

  7. 《LoadRunner 没有告诉你的》之三——理发店模型

    转载自:http://www.cnblogs.com/hcat/p/3967360.html 大概在一年前的一次讨论中,我的好友陈华第一次提到了这个模型的最初版本,经过几次讨论后,我们发现经过完善和扩 ...

  8. 光荣之路测试开发面试linux考题之四:性能命令

    Hi,大家好我是tom,I am back.今天要给大家讲讲linux系统一些性能相关命令. 1.fdisk 磁盘管理 是一个强大的危险命令,所有涉及磁盘的操作都由该命令完成,包括:新增磁盘.增删改磁 ...

  9. python 硬件自动化测试_村长告诉你:Python实现性能自动化测试竟然如此简单

    一.思考 1.什么是性能自动化测试? ◆性能 △ 系统负载能力 △ 超负荷运行下的稳定性 △ 系统瓶颈 ◆自动化测试 △ 使用程序代替手工 △ 提升测试效率 ◆性能自动化 △ 使用代码模拟大批量用户 ...

最新文章

  1. 用一维数组统计五个人的成绩中的最大值最小值平均值_昨天为了整理这份教程,我放弃了参加一个几亿人的大项目。...
  2. 虚拟现实技术的发展和分类
  3. linux红外键盘映射表,linux下修改键盘映射
  4. analyze table tablename
  5. rhel5下限值用户使用su切换身份
  6. 使用putty在linux主机和windows主机之间拷贝文件(已测试可执行)
  7. shell swt 样式_SWT之路:SWT图像显示
  8. 互联网晚报 | 9月5日 星期日 | 美菜回应大规模裁员;网易云音乐Q2毛利率首次转正;美团展示数字人民币新应用...
  9. rstudio 修改代码间距_如何在RStudio里修改R脚本的编码方式
  10. iPhone手机下载应用软件的区别(itunes,i4和itools)
  11. 后台网站首页设计过程
  12. 星际争霸2 AI开发
  13. 【物流篇】数商云物流供应链解决方案
  14. Unity 实战项目 ☀️| Unity实现 天空盒 轮播系列切换
  15. 幼儿园小游戏:小兔种萝卜
  16. tmdb电影票房_TMDb Vue.js应用程序:电影数据库应用程序
  17. LCA(倍增+Tarjan)和BFS、DFS以及Prim、Kruskal
  18. GMark 0.8.6 无法显示Google Bookmarks
  19. HTML技术 360度产品展示,360°产品展示
  20. 中国服务器审计系统,汉邦服务器监控与审计系统

热门文章

  1. git 提交文件_git原理与实战
  2. LeetCode 2147. 分隔长廊的方案数
  3. [Kaggle] Spam/Ham Email Classification 垃圾邮件分类(RNN/GRU/LSTM)
  4. LeetCode 915. 分割数组
  5. LeetCode 712. 两个字符串的最小ASCII删除和(DP,类似编辑距离)
  6. LeetCode 1017. 负二进制转换(负数进制转换)
  7. LeetCode 148. 排序链表(归并排序、快速排序)
  8. 数据结构--链表--LRU缓存
  9. 字符串处理 - DataFrame文本数据的量化 - Python代码
  10. mysql没有写入权限_MySQL的权限系统