• 12
  • 12
分享

  性能瓶颈就是制约系统性能的最主要因素,性能瓶颈定位指的是为了找出制约(系统、路径等)性能的最主要的因素而展开的分析、设计、测试、比较、调优等工作。

  本文所述的性能瓶颈定位方法适用于使用三层架构开发的B/S架构系统的性能测试。根据影响范围的不同和触发时间的不同,我们可以将性能瓶颈分为三类:系统类、事件类和路径类。系统类的瓶颈一般表现在由于硬件、系统配置参数引起的一系列性能问题;事件类瓶颈为通过某些性能指标的表象分析出的系统存在的性能问题;而路径类则是由于程序本身的问题引起的性能问题,比如程序模块调用错误引起的 “http500”的错误,它需要程序员遍历程序路径定位性能问题所在。

  本文介绍的性能瓶颈定位方法采用循序渐进的方式逐步深入剖析以发现性能问题所在,具体来说它可以分为三个阶段:性能前期准备分析阶段、性能执行快速定位阶段、性能深入分析常规定位阶段。下面就结合图1对我们的流程的各个阶段需要做的情况和顺序方式进行一个简要的说明。

  1.性能前期准备分析阶段

  如图1所示,前两个模块描述的即为性能前期准备分析阶段,该阶段的重点在于“性能测试关键参数配置指导手册”。总结该指导手册的目的在于整理出一套对系统性能有影响的参数设置情况,使测试人员在性能测试正式执行之前,通过比对参数参考值和实际值,提早发现由于系统参数引起的性能问题,及早规避由于系统参数带来的性能影响,为后面的性能测试工作的开展奠定基础。

  例如:某系统在进行并发性能测试过程中,发现系统运行一段时间后就会产生大量失败事物。

  问题原因分析:经分析该系统采用的中间件为WebSphere,该中间件有一个控制内存中保留的最大会话数的参数,其默认值为1000,在实际配置时需要根据系统的硬件配置进行适当的调整,一般建议设置为3000,该系统出现大量失败事物就是此参数的原因引起的,在修改了该参数后,出现的性能问题得到解决。可以看到在测试开始前就知晓这个参数并进行了设置就能提前规避一些类似的性能问题出现。

1-1.jpg

图 1:性能瓶颈定位方法流程图

  2.性能执行快速定位阶段

  快速瓶颈定位方法,实质也是通过常规的定位方法总结出来的,由于这些性能问题较常见,且具有一定的规律性,因此可以通过一些指标进行简单的判定,就能迅速定位性能问题所在。

  快速瓶颈定位可按照如下的过程来执行:

  通过性能测试工具(LoadRunner、Jmeter等)、各种监控工具获取系统的主要性能指标。

  收集获取的各项性能指标,参照快速定位方法,查看是否有符合的现象产生,定位系统性能瓶颈。

  系统性能指标体系没有符合的内容可供参考,查看归纳总结的快速瓶颈定位方法。

  其整个过程方法参见图2所示。

1-2.jpg

图 2:快速瓶颈定位方法

  快速瓶颈定位主要还是依赖于平时对常规性能问题的积累,它可以将平时遇见的各种系统性能问题,通过一些系统性能指标表示出来,为性能测试人员提供一种快捷查找问题所在的方式。

  例如:某个系统经过多轮的测试,发现系统响应时间和TPS出现波浪分布的现象,特别是在系统应用重新部署以后。

  问题原因分析:当系统响应时间和TPS出现时好时坏的情形时,一般都可能是应用自身引起的,本性能问题经定位发现是由于在每次部署程序后,开发人员修改了系统日志的记录级别所致,在修改了系统的日志记录级别为error级别后,系统性能保持稳定。

  通过该例子可以看到,一些平时经常遇见的性能问题,我们可以总结出来形成一个知识库,这样下一个测试人员在遇见同样表现的性能问题时就能够快速的定位问题所在,从而快速的解决相关性能问题。

  3.性能深入分析常规定位阶段

  系统性能瓶颈普遍表象为响应时间长或者占用系统资源大,因此,单纯从某些性能指标往往难以判定系统到底在哪个层面出现了问题。通过对性能测试工作的不断积累、提炼,本文总结了一个非常有用的规律:在常规软件性能测试中,可遵从“二八原则”,即70-80%的性能问题与应用程序相关,70-80%的应用程序问题与SQL语句相关,70-80%的SQL语句问题与索引、存储过程、关联查询、临时表等有关。因此,在常规瓶颈定位方法中,性能测试人员可以从SQL语句的优化进行着手,然后辅助其他方法逐步定位其它的性能瓶颈。

  在进行常规瓶颈定位方法时,我们应该按照如下的步骤来进行问题的定位。

  1)首先还是基于性能测试工具和监控工具,获取到系统的相关性能测试结果和各种性能指标。

  2)通过Proactive DBA等数据库分析工具抓取长事务SQL语句(一般认为1秒以上的SQL语句都需要关注),进行SQL语句分析法,在下面我们将具体介绍。

  3)SQL语句分析法不能解决问题,结合获取的性能结果和性能指标,查看系统性能指标体系,分析性能问题所在。

  4)结合系统性能指标体系,采用数据库SQl语句分析法、内存分析法、CPU分析法、磁盘I/O分析法、应用程序分析法等进行深入分析性能问题。

  5)通过分析方法给出优化建议,完成瓶颈定位。

1-3.jpg

图 3:常规瓶颈定位方法

  图3所示说明了进行瓶颈定位需要实现的步骤和流程,通过经验总结我们知道一般性能问题80%都是由于SQL引起,因此在进行性能问题定位时,可以先从SQL语句的分析着手,一般能够解决80%的性能问题,如若无法解决再使用内存分析法、CPU分析法、磁盘I/O分析法、应用程序分析法等方法对系统进行深入分析,通过这些方法定能对系统的性能问题进行分析定位。

  例如,内存泄露(比如:在长时间运行下,内存没有正常释放,引起宕机等)。

  定位性能问题方式:利用性能监控工具。比如:JAVA开发B/S结构的项目,可以通过JDK自带的Jconsole,或者JProfiler,来监控服务器性能,Jconsole可以远程监控服务器的CPU,内存,线程等状态,并绘制变化曲线图。利用Spotlight可以监控数据库使用情况。性能测试人员需要关注的性能点有:CPU负载,内存使用率,网络I/O等。

  对于上面出现的性能问题,其本身是比较复杂的,不能通过前面的经验一蹴而就的发现其根源所在,必须一步一步的通过我们的工具去剖析程序,去分析,才能够准确的去发现问题的所在。


作者:张鸿   

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 1、引言小屌丝:鱼哥,这金三银四的季节,你作为资深测试开发大佬(面试官),能不能分享一下关于UI自动化测试的技术呢?小鱼:不用给我戴高帽,你的小心思,我能不知道?小屌丝:嘿嘿,我主要提咱粉丝问的小鱼:你操的心还怎不少呢?小屌丝:主要是你分享的那篇《吊打面试官系列之:移动APP测试开发面试题汇总,对标P7~ ~》太给力了。小鱼:你可知道,移动测试app我准备了一周时间,小屌丝:那就麻烦鱼哥再花一个星期,来准备 UI自动化测试开发相关的知识,也让更多的人,能感受吊打"面试官"快感。小鱼:这.....作为一名合格面试官,岂能是被随便吊打的,不过,你的提议确实不错,我考虑下。小屌丝...
            2 3 14577
            分享
          •   作为一个30+的女性IT从业者,在体力、精力等方面已经远远赶不上年轻人了,不管是在日常的工作中还是面试中,都处于弱势地位。  30+的女性,在面试的时候,面试官都会问到一个问题,就是婚育情况,没结婚的问有没有对象,有了对象的问啥时候结婚,结了婚的问有没有孩子,有孩子的问要不要二胎三胎等等。  这些问题也成为女性员工就业、升职等的重要影响因素,只要有一项回答的不满意,你就会被pass掉,因为招聘者也怕你去他公司生孩子,毕竟产假那么长时间,有了孩子的怕你因为孩子耽误工作。那么我们作为一个30+的女性,应该如何应对这些情况呢,或者说如何打破这种困境呢?  做好充分准备  接到面试通知的时候,不能...
            0 0 965
            分享
          • 敏捷开发迭代速度快?开发完上线之后找不到相应人员?下一轮优化时不知从何下手?相信大家在平时的工作中都遇到过相关的问题,究其原因是没有留足够的时间进行相关文档的沉淀和归档,导致后来人员对于之前的项目不够熟悉,不知道如何下手。所谓好记性不如烂笔头,结束一个项目时抽空整理出相关的特点,给后来人一个大概的论述,相信能很好的发挥承上启下的作用。很感谢我的上一任上司,她督促我们每一个版本都需要养成总结文档的习惯,写功能说明文档的习惯也是从这个时候慢慢继承下来的。这里说的继承者是指——功能说明文档。每个专项开展测试,有新功能的时候都会测的热火朝天,但是测试结束之后,这个功能交接给另外的同学时或者合并到系统项...
            8 5 7438
            分享
          •   内卷,是现在热度非常高的一个词汇,随着热度不断攀升,隐隐到了“万物皆可卷”的程度。究其来源,内卷这个词的出现,是伴随着996的讨论开始的。  很不幸,996、福报这些词的重灾区和源头就是计算机/互联网行业,那么作为行业中一个非常重要的分支,测试圈的情况怎么样呢?  软件测试圈的内卷是怎样的?  在谈起测试圈的内卷之前,我们必须先搞清楚常说的内卷是什么。  内卷,网络流行词,本意是指人类社会在一个发展阶段达到某种确定的形式后,停滞不前或无法转化为另一种高级模式的现象。当社会资源无法满足所有人的需求时,人们通过竞争来获取更多资源。  后经网络流传,用来指代非理性的内部竞争或“被自愿”竞争,现在...
            11 11 973
            分享
          • 最近参加了公司内部的一个24小时编程比赛,组了个四人的小团队,设计了一个拍卖的功能,功能需求如下:1. 登陆2. 支付保证金3. 商品信息展示阶段4. 拍卖阶段叫价(最后一秒有人出价会延时5分钟)5. 尾款支付针对功能需求我们计划创建三个项目,一个后台拍卖活动数据维护,一个小程序做C端,一个api项目对前面两个项目做接口层的支持,业务流程走向如下:接口层部分做了如下8个接口,当然还有8个数据维护的接口这里就不列举了,就是针对表数据的一个增删改查,后面看DB设计即可知晓,流程没有画的特别详细但是主要流程都写了下面看下DB设计一共5张表下面看下我们后端维护数据的页面设计:这边设计的后台数据维护功能...
            11 11 1623
            分享
      • 51testing软件测试圈微信