vlambda博客
学习文章列表

为啥性能测试重要的是它?你不说,我都没在意!

为啥性能测试重要的是它?你不说,我都没在意!

性能指标的监控与分析作为性能测试工作流程中重要的一环,直接关系到性能测试是否充分有效、性能测试结果是否能为系统投产提供有效参考,重要性不言而喻。
本文以性能瓶颈定位方法为主线,介绍如何运用各种性能指标进行性能瓶颈定位。报告所述指标体系包含配置参数指标体系和应用性能指标体系两部分。其中,配置参数指标体系总结了测试环境中对性能影响较大的部分参数及其参考值。在正式开始性能测试之前,可通过本套配置参数指标体系对待测系统的各项参数配置进行检验,在测试前尽早规避一些由于配置参数导致的性能瓶颈。应用性能指标体系总结了对系统性能瓶颈有影响的主要性能指标,包括应用系统、服务器、数据库、中间件等各项指标值的参考值。进而分析各指标在不同组合取值的情形下,系统可能会出现的性能瓶颈,并给出相应的瓶颈定位和性能调优方式。指标主要采用矩阵表格的形式展示,该表以各性能指标为横、纵坐标,在给出性能指标标准值 (如表中的“各项性能指标标准值(保留)”行) 的基础上,在指标两两组合相交的位置,给出此情况下可能会出现的性能瓶颈,以及相应的性能调优方式。


为啥性能测试重要的是它?你不说,我都没在意!
一、性能指标体系
1.1 配置参数指标体系

构建配置参数指标体系的目的为在性能测试开始前,根据测试环境资源配置和待测交易的非功能需求,预先调整系统中可能影响性能的参数,提前规避由于各种配置参数带来的性能影响。

根据历史测试经验,应用系统的各项配置参数是影响系统性能的一个重要因素。经过对应用服务器、数据库服务器的大量数据收集以及研究梳理,本文总结研究出了配置参数指标体系,在该体系中详细介绍应用服务器、数据库服务器中可能对系统的性能产生影响的各种主要配置指标,并对每个指标的参考值进行了标注,为实际测试工作提供参考依据。需注意,此范围仅作参考,其具体设置值需根据各个应用系统的实际情况进行相应的调整,从而使得各参数值能给系统带来更好的性能表现。

表 1配置参数指标体系示例
为啥性能测试重要的是它?你不说,我都没在意!


本体系需要从以下几个层面去使用,第一是开始进行性能测试前,需要对照本体系将相关参数配置情况如实的记录下来,第二就是根据测试结果并对照参考值调整相应的指标。

1.2 应用性能指标体系

应用性能指标体系,主要从应用系统、服务器、数据库和中间件等方面归纳收集整理主要性能指标,该体系主要收录了一些经验数据,将一些常见的性能问题及发现方式通过该体系展现出来,其目的一是为读者学习提供参考,二是为性能测试人员性能测试分析提供知识的积累,并希望能够在以后的工作中能通过这个体系模板,不断的归纳总结出一些共性问题,使得性能测试的知识得到一个积累和沉淀。

表2展示的就是该体系中的部分内容,本体系采用了一种类似矩阵的方式来展示,这样可以通过不同指标的组合,列举出一些常见的性能问题,并能够给出简单的优化建议。本体系横列为服务器、数据库和中间件的主要性能指标,纵列为应用系统最为关心的响应时间、TPS、成功率。


表 2应用系统性能指标体系示例
为啥性能测试重要的是它?你不说,我都没在意!


横列的第二行给出了这些指标的参考值范围及参考值的评价,这样可以为使用该体系的人员一个比较直观的概念,并且也能通过这些参考值范围给被测系统的性能优劣给出一个初步的判定。在横列和纵列之间主要就是针对不同指标组合可能产生什么样的性能问题以及其解决办法的描述,可以说该体系是历史经验总结沉淀下来的成果。

在实际的性能测试工作中,测试人员可以在发现系统性能问题后直接对照本体系,查看是否有类似的问题描述,如果有可以通过描述的内容快速定位问题所在,并给出一定的调优建议;如果没有类似的问题出现,需要测试人员将问题记录下来,按照常规方式定位问题所在,并总结这样的现象是否为常规的现象,如果是,需将它总结归纳到该体系中。


为啥性能测试重要的是它?你不说,我都没在意!
二、性能瓶颈定位方法
基于性能指标体系的性能瓶颈定位方法

本章介绍性能瓶颈定位方法,第一节通过流程图对整个性能瓶颈的定位方法进行全方位的说明,并以此定义出一套比较规范的查找、定位系统瓶颈的流程方法;第二节阐述以往项目性能测试过程中遇到的性能瓶颈问题和解决问题的方法、经验,总结快速定位系统性能瓶颈的方法,以便性能测试人员在实际的性能测试工作中能够快速的定位系统性能瓶颈问题所在;第三节总结各种常规的性能瓶颈定位方式,着重总结内存分析、处理器分析、磁盘I/O分析、网络分析、应用分析等几种常用的分析方法。使用者可基于这些方法和指标,结合系统的各种表象,定位、分析系统出现的性能问题所在。

2.1 性能瓶颈定位方法概述

本节首先引入两个基本概念:性能瓶颈和性能瓶颈定位。性能瓶颈为制约系统性能的最主要因素;性能瓶颈定位指为了找出制约性能的最主要的因素而展开的分析、设计、测试、比较、调优等工作。

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

性能瓶颈定位方法采用循序渐进的方式,逐步深入剖析性能问题所在。具体而言,实施为三个阶段:性能前期准备分析阶段、性能执行快速定位阶段、性能常规定位阶段。下面结合图1对流程各个阶段的任务和执行方式进行简要的说明。

(一)性能前期准备分析阶段

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


为啥性能测试重要的是它?你不说,我都没在意!
为啥性能测试重要的是它?你不说,我都没在意!
图1:性能瓶颈定位方法流程图


(二)性能执行快速定位阶段

性能执行快速定位阶段,如图1所示,包括从流程图中第三到第五个步骤。该阶段的工作建立在基于性能测试工具(在这里主要使用LoadRunner工具进行说明,以下同)进行性能测试的基础上。在使用性能工具进行性能测试过程中,可以获取一些性能指标,例如响应时间、TPS、吞吐量以及一些简单的错误信息等,通过结合一些监控工具和监控方式,例如监控系统各项指标的nmon,监控数据库性能;抓取响应时间较长的SQL,获取系统和数据库相关指标,快速定位一些常见的性能问题(具体参见1.2节)

在此阶段里将使用到另一个重要成果“应用性能指标体系”,体系中将会描述如何组合一些关键的性能指标从而定位性能瓶颈所在。

(三)性能常规定位阶段

这一阶段的工作主要为图1所示的性能常规定位阶段。如经过第一阶段与第二阶段仍然无法发现性能问题所在,则执行此步骤。此阶段为定位性能瓶颈的高级阶段。

首先,此阶段总结性能指标,同时总结一些常用的分析方法,对性能问题进一步的剖析,使得对性能问题的定位更准确深入。例如,可以使用内存分析方法查找一些内存泄露或者硬件不足带来的性能问题,通过CPU分析方法定位一些CPU使用率持续增高带来的性能问题等。本文2.3.3章节会对该类方法进行详细阐述。

通过上述方法,本文探索一套实用流程,不仅能为性能测试初学者提供一套系统瓶颈定位的方法,也为性能测试高级人员提供了一个系统瓶颈定位的参考方向。

2.2 快速瓶颈定位

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

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

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

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

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

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


为啥性能测试重要的是它?你不说,我都没在意!
图 2:快速瓶颈定位方法


快速瓶颈定位主要还是依赖于“性能指标体系”,它将平时遇见的各种系统性能问题,通过系统各项性能指标表示出来,为性能测试人员提供一种快捷查找问题所在的方式。此外,本文还总结了一些常见的性能瓶颈问题和此类问题的解决方式的例子,为性能测试人员在性能测试过程中遇到类似的问题提供一定的帮助,示例如下:

问题1:在高并发情况下,产生的业务处理失败(比如:数据库连接池过低,服务器连接数超过上限,数据库锁控制考虑不足等)

定位性能问题方式:查看系统日志。系统日志是定位问题的不二法宝,如果日志记录全面,很容易通过日志发现问题。比如,系统宕机时,系统日志打印了某方法执行时抛出的out of memory错误,性能测试人员就可以顺藤摸瓜,很快定位到内存溢出的问题。

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

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

问题3:CPU使用偏离(比如:高并发导致CPU使用率过高)

定位性能问题方式:工具和日志只是手段,除此之外,还需要设计合理的性能测试场景。具体场景有:性能测试,负载测试,压力测试,稳定性测试,浪涌测试等,好的测试场景,能更加快速的发现瓶颈,定位瓶颈。

问题4:日志打印过多,服务器无硬盘空间。

定位性能问题方式:性能测试人员通过了解系统参数配置,进行后期的性能调优。

问题5:使用性能测试工具做系统高并发,系统服务器运行正常,客户端程序出现未响应。

定位性能问题方式:通过分析,系统服务器运行正常,说明问题不在服务器。客户端程序出现未响应,由于是高并发测试,说明客户端程序出现多线程调用死锁。性能测试人员可以通过远程调用多个客户端的服务,分散性能测试工具客户端的压力来解决。本文通过提出、定位、解决该问题的例子,提醒性能测试人员关注测试过程中的性能瓶颈不应该发生在测试脚本和测试工具上。

2.3 常规瓶颈定位方法

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


为啥性能测试重要的是它?你不说,我都没在意!
为啥性能测试重要的是它?你不说,我都没在意!
图 3:常规瓶颈定位方法


在进行常规瓶颈定位方法时,性能测试人员可以参照如下的步骤来进行问题的定位:

(1)通过性能测试工具(性能测试工具)和监控工具,获取到系统的相关性能测试结果和各种性能指标。

(2)抓取长事务SQL语句(一般认为执行周期1秒以上的SQL语句都需要关注),进行SQL语句分析。

(3)结合获取的性能结果和性能指标,分析性能问题所在。

(4)结合应用性能指标体系,采用SQL分析法,内存分析法、CPU分析法、磁盘I/O分析法、应用程序分析法等综合深入分析性能问题。

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

图三说明了进行瓶颈定位的步骤和流程,下面就各种定位方法进行详细的介绍。


……

点击阅读原文查看全文!


为啥性能测试重要的是它?你不说,我都没在意!

推荐阅读

点击阅读☞

点击阅读☞

点击阅读☞

点击阅读☞

点击阅读☞

“阅读原文”查看全文吧!