热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

谈谈性能基线

一、背景与说明1.1、性能基线的背景与意义当系统的操作响应时间超出了用户可接受的程度,说明系统出现了性能问题,需要技术人员对系统进行优化,

一、背景与说明

1.1、性能基线的背景与意义

  当系统的操作响应时间超出了用户可接受的程度,说明系统出现了性能问题,需要技术人员对系统进行优化,但是 “用户是否可接受”是一个主观的无法直接测量的标准,具体在何种程度下需要开启对系统性能的优化工作,又优化到何种程度后可以终止工作,没有统一的度量标准。 
  另外,真正引起性能问题的原因不仅仅是程序代码,也可能是承载系统运行的计算资源不充足,那么如何让性能优化人员明确目前到底是应该扩充计算资源还是修改程序代码,也需要有统一的指导标准和原则。 
  在这些问题背景下,性能基线就显得十分必要。性能基线的含义就是在可控的标准化的环境下,通过测试工具采集和人工分析后得出的有参考价值的指标数据。概括的来说,这些指标数据的主要作用如下: 
  1.为容量规划确定系统和应用程序的极限; 
  2.为配置测试的参数和配置选项提供参考依据; 
  3.为验收测试确定系统是否具备自己所宣称的能力; 
  4.为性能基线的建立提供长期的数据统计来源以及比较基准。

1.2、预期读者与目标

  系统架构师或技术负责人:依照系统性能需求,参照性能基线测算计算资源需求; 
  性能测试人员:了解性能基线指标值,能够在测试环境中计算资源不充足的情况下,也对系统的性能表现进行测试并把关,明确系统性能是否达到基线要求,性能测试是否可以通过; 
  性能调优人员:为性能调优建立目标,只有系统性能表现满足基线指标值,方可完成性能调优工作。

1.3、性能基线指标选择

1.3.1、性能指标相关名词解释

  QPS:每秒请求处理量(Query Per Second),是对一个特定的应用系统在规定时间内所处理流量多少的衡量标准。通俗讲即,每秒钟处理完请求的次数,注意这里是处理完,具体是指发出请求到服务器处理完成功返回结果; 
  事务(Transaction):一组请求,事务的开始和事务的结束在录制压测脚本时定义,事务中包含的请求视具体业务场景而定,故事务中请求的数量无法固定有多有少。例如:用户登录作为一个事务,里面包含了登录页面加载、登录验证请求、首页面菜单数据请求、消息提醒请求、元件页面加载请求等多个服务器请求; 
  并发:系统能同时处理的事务数,在loadrunner压测工具里,并发一般指设置的并发用户数Vuser的数量; 
  TPS:Transaction Per Second,每秒钟系统可执行完成的事务的数量。 
  并发、QPS、TPS间的关系: 
    QPS = TPS*事务包含请求数量 
    并发数 = (QPS/事务包含请求数量)*事务平均响应时间 
    并发数 = TPS*事务平均响应时间

1.3.2、基线指标选择

一、为什么不使用并发作为性能基线指标? 
  在脱离了响应时间标准的情况下,单纯的并发量,只能反映系统承载压力,不能反映系统的性能表现,固只用并发来作为性能基线指标没有意义。

二、为什么不使用并发+响应时间(即TPS)作为性能基线指标? 
  项目上的性能需求描述往往是支持多少并发,响应时间在多少秒以内,这个完整的描述实际上就是TPS的要求。例如:500并发用户,响应时间不超过3秒,依照上文并发与TPS的换算公式,TPS指标要求极为500/3=166.6,即应用系统需要单秒处理166笔事务。 
  按上述,TPS确实可以反映出系统的性能表现,但考虑事务的多样性复杂性,TPS数值没有普适价值。压测TPS值会被测试场景事务的复杂度影响,实际举例: 
  有A、B两套系统,使用相同的硬件资源进行部署,A系统登录场景下,内部由10个请求构成,B系统登录场景,内部由15个请求构成,A系统压测结果有150TPS,B系统压测结果有100TPS,虽然A系统TPS值更高,但并不能说明A系统的性能表现比B系统好,因为B系统本身根据业务需要,场景复杂度更高,单事务对系统资源的需求也更高,TPS值比A系统低是合理的,故TPS也不能用来作为性能极限指标。

三、为什么要使用QPS作为性能基线指标? 
  请求作为构成服务器压力的原子单位,单位时间内处理请求数(QPS)相较上述指标来说,更易作为跨系统、不同硬件环境下性能对比的统一标准。 
  还是上述A、B系统为例,A系统场景10个请求,150TPS,换算为QPS为1500,B系统场景15个请求,100TPS,换算为QPS也是1500,虽然到请求级别,也会存在复杂度偏差,但基于统计与比较基准需要,可以认为A、B两套系统的性能表现持平或者是接近,并非A系统表现比B好很多。

四、还需要加入硬件资源的考量因素 
  上述A、B系统,假设前提是使用了相同的硬件资源条件,但是在实际情况下,不同系统部署使用的硬件资源是不一样的,如果A系统使用了更好的资源,性能表现优于B系统,也无法说明A系统的程序性能优于B系统。 
  故性能基线除了QPS值以外,还需要加入硬件资源的考量因素,最终性能基线的指标为:单位硬件资源(如单台应用服务器4核8G内存)下,系统压测的QPS极值。

二、性能基线测试

2.1、测试目的与策略

  基线测试的目的是得到压测基础数据,便于后续推导出性能基线指标。 
  主要的测试策略: 
    1.构建可控环境,提供标准化的测试场景、测试工具和测试环境资源; 
    2.使用压测工具,测试同一场景,通过不断改变硬件资源投入,分别获得系统QPS极值。

2.2、测试准备

2.2.1、测试场景标准化

场景一、读数据场景 
  脚本概述:访问用户登录页,输入账户密码后,等待加载首页完,在个人消息中心里进行搜索(搜索条件为空) ,脚本中账户密码参数化500个账号。实际包含对一张数据量100万级别的数据表进行2次数据库查询操作。 
  压测场景:没有集合点和思考时间,模拟缓存压测,500并发

场景二、写数据场景 
  脚本概述:访问用户登录页,输入账户密码后,等待加载首页完,打开定制的压测页面,新增数据,脚本中账户密码参数化500个账号。实际包含一次百万级数据查询和一次删除、两次插入的数据库操作。 
  压测场景:没有集合点和思考时间,模拟缓存压测,500并发

2.2.2、计算资源标准化

  本次测试环境为内网环境,千兆带宽 
  软硬件配置: 
    4台web服务器:Linux系统,4核8G,web应用基于Ecloud容器部署 
    Nginx服务器:Linux系统,4核8G,nginx基于Ecloud容器部署 
    Redis服务器:Linux系统,4核8G,redis基于Ecloud容器部署 
    Mysql服务器:Linux系统,8核32G,磁盘IOPS限制在5000

2.2.3、测试工具标准化

  性能测试工具:Loadrunner11.0

2.3、测试结果

2.3.1、读数据场景测试结果

  读数据场景,在单机web服务器cpu达到瓶颈时采集压测数据,后在集群模式下,通过水平扩展web服务器,直到扩展到4台web服务器,所有场景下都为web服务器CPU先到瓶颈。 
  测试结果数据: 

测试条件测试结果 服务器CPU      
系统架构事务响应时间QPS(HPS)Web1Web2Web3Web4RedisNginx数据库
单机部署0.51s973.982  87.7%   14.1%
两台集群0.228s2092.32188.6% 84.3% 11.9%13.1%32.8%
三台集群0.154s3107.39793.2% 89.2%88.6%18.5%20.1%40.3%
四台集群0.125s3992.36890.4%85.3%84.8%87.4%20.3%18.6%52.1%
2.3.2、写数据场景测试结果

  写数据场景,在单机web服务器cpu达到瓶颈时QPS为671,后在集群模式下,通过水平扩展web服务器,直到扩展到4台web服务器,所有场景下都为web服务器CPU先到瓶颈。 
  测试结果数据:

测试条件测试结果 服务器CPU      IOPS
系统架构事务响应时间QPS(HPS)Web1Web2Web3Web4RedisNginx数据库数据库
单机部署0.744s671.699  91.5%   21.8%2221
两台集群0.406s1228.96193.8% 84.6% 41.2%14%40.7%2687.5
三台集群0.259s1933.57694.6% 92.8%94.1%51.7%17.8%52%3314
四台集群0.19s2627.38495.2%89.6%87.9%88.7%58.5%23.9%59.8%3344

三、发现与结论

3.1、基础结论

  就目前压测的两个场景:读数据、写数据,在web服务器cpu达到瓶颈的情况下,其他性能指标均未达到瓶颈的情况下,集群模式通过水平扩展web服务器,可实现处理性能(以QPS为衡量指标)线性增长; 
  单纯的读数据场景下,每增加一台4核8G服务器,系统QPS值提升1000左右; 
  单纯的写数据场景下,每增加一台4核8G服务器,系统QPS值提升650左右。

3.2、推论

  基于上述数据,可得出基线指标的结论为:为F9框架系统部署提供硬件资源,每一个CPU核,可支撑系统性能表现QPS值在160~250之间,如果实际压测时,依照投入的资源情况,评测出系统性能表现低于此区间的,则认为性能达不到基线标准,需要进行系统调优。

四、补充说明

4.1、数据库磁盘IOPS为何限制在5000?

  在本次性能基线测试中,预先对数据库服务器的磁盘进行了IOPS值的限制,限制值为5000。 
  一、为什么要限制IOPS? 
  因为根据实际项目经验,很多项目的没有特别强悍的数据库服务器,特别是磁盘IOPS,往往会成为系统瓶颈所在,本次测试通过限制IOPS值,也同步验证下F9框架在特定IOPS极限值下是否可以满足性能需求。 
  二、为什么限制在5000? 
  5000这个数值,也是根据性能调优人员经验确定。可认为,数据库服务器磁盘IOPS 5000是基本的硬件指标要求,如果低于此值,可以认为硬件条件不达标,难以满足大型项目高并发要求,需要调整数据库服务器资源投入。 
  另外,许多项目使用虚拟机作为数据库服务器,且使用共享磁盘,IOPS能力也被分占,往往达不到5000 IOPS的要求,所以在大型项目或对系统性能有一定要求的项目中,不推荐使用虚拟机作为数据库服务器。

4.2、通俗化的性能基线指标

  由于目前的性能需求往往都是并发+响应时间这样的描述,并不能对应的了QPS值,无法指导计算资源评估,为了将性能基线通俗化,需要进行一下换算。考虑到事务复杂度不一,为了便于换算,统一预估单事务平均包含10个请求,单事务响应时间为3秒。基于单机器4核8G,QPS值为650~1000之间,依照换算公式“并发=QPS/单事务请求数*事务响应时间”,支撑并发量为195~300之间。故通俗化的基线指标为,单台4核8Gweb服务器,支持用户并发195~300间。按此,一个需要满足1000并发量要求的系统,大致需要4台4核8Gweb服务器。

转:https://www.cnblogs.com/timePasser-leoli/p/10642822.html



推荐阅读
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
author-avatar
茶人2502933107
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有