性能测试诊断分析与优化(txt+pdf+epub+mobi电子书下载)


发布时间:2021-03-30 17:33:32

点击下载

作者:陈能技

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

性能测试诊断分析与优化

性能测试诊断分析与优化试读:

前言

软件系统是企业IT的核心,软件系统的质量影响着企业的运转、业务的开展,除了软件系统的功能正确性外,软件系统的质量还包括性能、安全性、可靠性等。

软件性能问题遍布各种行业领域的软件系统,例如金融业务服务系统、电子商务网站、移动互联应用系统、网络游戏、嵌入式软件系统等。在竞争日趋激烈的商业环境下,为了满足用户日益增加的体验需求,软件系统的性能优化被提到了前所未有的高度,您的软件系统比竞争对手快1秒,您就有可能比竞争对手多赚100万!

软件性能优化离不开性能测试,全面的性能优化需要全过程的性能测试解决方案,包括性能需求分析、性能设计、性能系统测试、性能诊断分析与调优。

在软件生命周期的需求分析阶段,需要对软件性能的需求作出定义,并进行需求分析,尤其是软件性能需求的可测试性分析,这有利于后续开展性能架构设计和性能测试的工作。

在设计阶段,尤其是架构设计阶段,应该对软件系统的性能架构进行充分设计、原型评估,必要时在这个阶段可进行小规模的性能验证性测试,以便论证系统架构在性能上的可扩展性。

在代码设计阶段,需要按照指定的开发规范进行软件开发。为了获得最佳的性能体验,需要从每个细节入手确保软件性能,及时进行代码性能检查和评估。

系统的性能测试可分为负载测试、压力测试、耐力测试、容量测试等多种类型,不同类型的性能测试侧重点不同,需要根据软件系统特点和项目类型进行选择。

软件系统的性能瓶颈可能出现在各个环节,例如数据库、中间件应用服务器、Web服务器、网络、代码层。性能瓶颈的定位和诊断分析需要熟悉软件系统的各个方面,通常需要多种项目成员角色配合一起完成,例如DBA、系统管理员、网络管理员、设计人员、测试人员等。

本书结合主流的性能测试工具LoadRunner,讲解性能测试过程、方法和技术。另外,结合笔者多年性能测试和性能优化经验,详细讲解了软件系统常见的性能瓶颈,以及如何发现、诊断分析这些性能瓶颈,从而提出性能优化方案。

本书的内容安排

本书分为3篇,共10章,从软件性能测试的基本概念讲起,再进一步介绍性能测试的基本方法和流程,然后基于LoadRunner介绍性能测试工具的使用方法、测试脚本的开发技巧,以及性能场景设计、性能测试结果分析,之后结合主流操作系统、Web服务器、应用服务器和数据库,从多方面、多角度出发详细讲解性能问题的诊断分析技巧。

第1篇 性能测试基础篇(第1章和第2章)

讲述了性能测试的基础知识,性能测试基本流程。这两章内容是性能测试工程师必须具备的基础知识。

第2篇 性能测试工具篇(第3章到第5章)

性能测试工具是性能测试工程师的基本“装备”,掌握性能测试工具的基本使用方法,才有可能顺利开展性能测试和性能监控,以及后续的性能分析诊断、性能优化工作。LoadRunner作为业界主流的性能测试工具,是性能测试工程师必备的“利器”。第3章到第5章的内容涵盖LoadRunner性能测试工具的使用、脚本开发、场景设计与运行、测试结果分析等内容。

第3篇 性能问题诊断分析篇(第6章到第10章)

性能瓶颈可能出现在软件系统的各个方面,第6章到第10章的内容分别从Web服务器、应用服务器、数据库服务器、应用程序代码、操作系统等层面进行性能问题的分析诊断。让性能测试工程师可以借助笔者总结的丰富经验,应用于实际性能测试项目的性能问题诊断分析优化。

本书由浅入深,由理论到实践,尤其适合初级读者逐步学习和完善自己的性能测试方面的知识结构,加上LoadRunner性能测试工具的应用技巧和性能瓶颈的分析诊断技巧,是性能测试团队和性能测试工程师的案头指南和最佳实践指导。

本书特色

本书在讲解性能测试过程、性能测试工具LoadRunner的使用,以及性能问题诊断分析的过程中,通过详细的例子进行分析,让读者可以通过例子理解,并且可以自己进行尝试,非常适合独立学习和研究性能测试技术、性能优化技巧的初级测试工程师参考使用。

本书以循序渐进的方式讲解了性能测试的基本知识,结合 LoadRunner 的使用,深入讲解性能测试脚本的开发,在讲解性能诊断分析技术时,涉及目前流行的 Web 服务器、应用服务器、数据库服务器等方面的内容,例如Apache、Tomcat、WebLogic、Oracle、Linux等。

在讲解性能诊断分析技术时,首先分析系统组件的架构原理,再介绍性能监控的方法,最后引出性能问题出现的原因和诊断分析的技巧,以及调优的方法。

适合阅读本书的读者

本书面向使用 LoadRunner 等性能测试工具进行性能测试的测试工程师、QA,以及希望了解性能测试的测试员,希望掌握性能诊断分析技术的软件工程师。

编者

2012年3月第1篇 性能测试基础篇

▶ 第1章 性能测试基础

▶ 第2章 性能测试流程

讲述了性能测试的基础知识,性能测试基本流程。这两章内容是性能测试工程师必须具备的基础知识。第1章 性能测试基础

千里之行,始于足下。

由于一个大型的系统往往是由多个系统或组件组成的,性能问题可能出现在每一个组件上,因此性能测试涉及的知识面非常广,从性能测试工具的使用到脚本设计,再到服务器、数据库、网络、编程语言等。

本章重点讲解性能测试所涉及的基础知识,为后续学习性能测试诊断分析和优化打下扎实的基础。1.1 性能测试的重要意义

随着社会的发展,科技的进步,信息技术的飞速发展,计算机的普及,软件产品已经应用到社会的各个行业领域,加上网络的发展,信息的共享性等,人们对计算机及网络的依赖性越来越大。软件产品的使用者对高质量、高效率的工作方式的要求越来越高,因此对于工作和生活中息息相关的IT系统服务,他们也要求提供更快、更高效的服务品质。

网络的发展,让人们对网络的依赖越来越大,对外界新事物的好奇心等也越来越强烈,成千上万的用户在庞大的网络系统中游转。网络时代的到来,也给提供服务的系统带来严重的系统负荷,这就是系统网络发展中最明显的特征:“高并发”、“数据集中”。

数据越来越集中于后台系统服务器中,众多系统同时为成千上万的网络用户提供服务,如银行、电信、社交网站等公司的软件系统随处可见,影响着我们生活的方方面面。随着各个企业的业务发展、用户访问量的增加,其服务系统承载的负荷也会随着增加,系统性能的好坏将严重影响企业的利益,因此对于IT服务系统的性能测试与优化也越来越受业界的重视。

目前典型的企业信息服务系统的架构大致如图1.1所示。图1.1 典型的企业信息服务系统的架构

一般是由客户端、网络、防火墙、负载均衡服务器(硬件如F5、软件Apache等)、Web服务器、应用服务器(中间件WebLogic、Tomcat等)、数据库服务器等各个环节组成。

在交付给客户上线使用之前,业务系统的每个环节都要进行性能测试和优化,才能保证上线后的质量。每个环节都要有专业人士协助性能的诊断和优化,这些专业人士包括:性能测试工程师、系统管理员、网络工程师、DBA、程序设计人员等。

IT服务系统的性能测试与优化是一项复杂、富有挑战性的工作,对于一个专业的测试人员而言,性能优化技术的学习和研究有利于性能测试工作的顺利、深入开展。1.1.1 功能测试和性能测试

功能测试主要根据产品业务需求、产品行业特征、模拟用户操作方式来测试一个产品的特性以确定它们是否满足用户需求。

性能测试则是通过某种特定的方式对被测试系统按照一定的测试策略进行施压,获取该系统的响应时间、运行效率、资源利用情况等各项性能指标,来评价系统是否满足用户性能需求的过程。

通俗地说,功能测试用于确保软件系统做了正确的事情,性能测试则用于确保软件系统快速地完成了任务。1.1.2 项目组不同角色眼中的软件性能

1.系统管理员眼中的软件性能

系统管理员作为软件系统的运维人员,主要关注服务器的资源使用状况、系统的扩展性、系统支持的最大用户量、系统稳定性,以及系统可能出现的瓶颈、出现异常的情况下如何处理等。

2.研发人员眼中的软件性能

作为研发人员,他们会更关注软件系统架构设计的合理性、数据库的设计是否存在问题、代码是否存在性能方面问题、内存使用方式是否正确、线程同步方式是否合理、是否存在不合理的资源竞争等。

3.测试人员眼中的软件性能

测试人员是软件性能质量的把关者,在软件性能生命周期中占据至关重要的位置,软件性能测试工程师要对性能问题进行监控、分析及模拟实际使用过程中所出现的性能问题。还要跟各个角色做好沟通工作,对测试出的各种性能问题,要提供充分有力的数据,为后续的分析和定位性能问题、性能优化工作做好充分的准备。1.1.3 1秒的性能对于顾客的意义

根据2008年Aberdeen Group的研究报告,对于Web网站,1秒的页面加载延迟相当于少了11%的PV(page view),相当于降低了16%的顾客满意度。如果从金钱的角度计算,就意味着:如果一个网站每天挣10万元,那么一年下来,由于页面加载速度比竞争对手慢1秒,可能导致总共损失25万元的销售额。

Compuware公司分析了超过150个网站和150万个浏览页面,发现页面响应时间从2秒增长到10秒,会导致38%的页面浏览放弃率。

由此可见,网站性能与业务目标有着直接的关系,对网站进行负载测试非常重要。1.2 软件性能的生命周期

影响软件性能的要素有很多,在需求阶段就应该对软件性能进行分析,在设计阶段要充分考虑软件架构设计对性能的影响,在测试阶段要充分验证软件的性能表现是否满足需求。1.2.1 需求阶段的性能分析

从业务角度分析,如果一个系统上线后使用人数比较多,而且后期数据量比较大(如电信、金融证券等对外开放的系统),就有必要做好性能测试,因为这些系统对于实时性交互要求比较高,对系统的响应时间、并发用户数等要求都比较高,并且从数据角度分析,系统上线几年后存量数据一般都是千万级数据量,因此前期性能设计与验证对业务系统的后期正常运行维护至关重要。

在软件开发前期的需求分析阶段,需求分析师与客户业务人员沟通时,要明确提出各项性能指标,包括系统业务交易的使用频度、系统并发用户量、业务数据量评估等各项指标。然后对系统的响应时间、用户数和资源使用进行分析。

1.响应时间分析

响应时间的需求调研分析,例如查询类的交易需要在多少秒之内响应,对于URL连接或者刷新整个网页的时间,它是一个非常重要的度量值,因为它是直接体现用户体验的一个指数。

它同时也是最不容易测量的度量值,因为它比其他的度量值更容易发生变化。我们需要了解响应时间的区域分布。例如:一般月底是发工资的时候,查询当前账户额度是用户这段时间最常用的功能,这段时间的系统响应时间估计比平常响应时间慢些,而对于电信之类的报表查询,省内公司查询当月本省各个分公司、分点的销售额情况,总公司查询全国各省的总销售额情况,这时数量级别相差甚大,查询时响应时间也相对比较慢。这些情况对于指导服务器分布、负载均衡、数据库的设计都非常重要。

2.用户数分析

用户数分析,主要分析评估系统上线后的总用户数、平均每天在线用户数等情况,具体可分析:哪些交易每天都有用户在执行业务交易,这些用户一般占系统总人数的比例是多少;哪些交易会在月底、季末或者年底高频率并发使用;哪些交易用户使用得比较少,但却是相关重要人物(如上级领导)重点关注的交易。这些用户数分析结果,可为后续的性能测试设计中,针对混合场景的用户数配比设计提供有力的参考依据。

3.资源使用分析

资源使用分析用于衡量系统资源使用率的情况,反映系统的最底层性能情况,对于容量规划比较有指导作用,同时它也是比较容易理解的性能度量值。1.2.2 设计开发阶段的性能分析与验证

大部分项目的性能问题是设计出来的,而不是开发和测试出来的。要获得性能良好的软件系统,需要根据需求分析及设计规划,进行系统的规模分析和完整的性能分析,预估性能瓶颈点,提出解决方案,最后通过架构师、程序设计人员等角色进行评审验证并确认,保障性能目标的达成。

在代码开发阶段,需要根据设计方案,在开发过程中关注性能瓶颈点,进行相应的白盒测试,通过代码分析和评审等手段,确认性能瓶颈并解决。需要不断地分析和总结性能问题和解决方案,形成性能方面的代码编写规范,从而在研发阶段的早期就能确保把软件系统在性能方面的风险降到最低。

系统设计与代码实现的很多细节都会对软件系统性能起到关键的作用。例如,在数据查询界面设计时,需要考虑查询方式是模糊查询还是精确查询、如何设计查询分页展现、对象的创建以及释放问题等。

在采用具体实现技术时,也需要注意性能细节,例如 Hibernate 中对大数据量查询时,需慎用 list()或者 iterator()遍历返回查询结果。

在采用Java等托管语言开发软件系统时,需要注意对象的生成和对象大小问题,否则容易导致产生大量对象实例,系统不仅要花时间生成对象,还可能要花时间对这些对象进行垃圾回收和处理,生成过多的对象将会对程序的性能带来很大的影响。

在数据库设计上也有很多细节会对后期系统性能表现有决定性的影响,例如:对历史查询是否分区、如何分区性能更好;如何设计批量数据抽取转换的方式,以保证减少或消除等待;如何设计索引,减少全表扫描、提高SQL查询效率;编写良好的SQL语句以便提高重用率、减少数据库解析。1.2.3 系统测试阶段的性能验证与优化

性能问题越早发现、修改,越能保证系统上线后的稳定性,因此应该在软件生命周期的不同阶段进行软件性能测试。

性能测试大致可以分为单元性能测试、集成性能测试、系统性能测试、多套系统互联接口性能测试等。其中,对一套系统进行的系统性能测试,也就是在特定的环境下、一定量的数据情况下,进行的系统级的性能测试,是最常用的,也是最为测试人员所熟悉的一种性能测试。

系统性能测试阶段的一般测试过程如下:在系统功能被确认后,模拟真实生产环境进行软件系统的部署(包括硬件设备、操作系统、网络搭建、负载均衡部署、中间件部署、数据库部署等),然后再根据前期的性能测试需求分析结果及测试策略定义的方法,模拟一定量的虚拟并发用户数,进行压力测试,同时监控分析系统是否满足预期的性能指标,识别性能可能出现的瓶颈点(应用代码、网络设备、硬件设备、操作系统、中间件配置、数据库等),并进行性能优化处理,调优后再进行复测,确保软件系统最终达到性能要求。1.3 软件性能认知

软件性能与软件功能有很大的区别,对于软件性能的基本认知是进行软件性能测试的前提,这就好比我们想学中医、学针灸,首先要搞清楚人体脉络等基本概念一样。1.3.1 什么是软件性能

目前对很多行业来说,IT技术正在支持关键的业务应用,如制造业的ERP系统、电信BOSS系统、银行的核心业务系统,以及基于电子商务的业务系统等。这些关键业务系统的运行状况关系到整个企业的运转命脉,如果性能下降往往对业务造成巨大的损失。

软件性能的好坏主要体现在:系统在一定的负载压力工作情况下,能否及时为用户提供相应的服务能力,具体包括系统响应时间、吞吐量和资源利用率等。例如用户在 ATM 取款机查询当前账户信息,需要很长时间,这就是性能问题。现实生活中,排队等待往往是性能问题导致的,如图1.2所示。图1.2 排队等待往往是系统的性能问题导致的

软件系统的性能对于顾客而言是可以直接感受的,例如访问网站,页面加载时间很长,这就好比周末去购物要排很长的队结账一样。但是周末购物是否需要排很长的队往往是可以提前预知的,例如如果看到车都停得比较满了,就可以预料到购物的人比较多,需要排队;而访问网站的人只有真正打开浏览器,尝试访问某个页面或进行某个具体应用的操作时,才能感受到性能问题。1.3.2 影响软件性能的因素

目前,大部分系统都是为多用户、跨地域、多部门机构提高服务的,目前一般中小企业的员工人数也有几十号人,实际并发数量比较小,在软件性能方面影响不大,但是对于中大型企业、大型国企或跨国垮区域的集团企业,公司的员工有几千人,甚至几万人,而且一般一套系统都要运行很多年,这样存量数据也非常惊人,对于软件系统的性能表现影响巨大。

影响性能的主要因素包括:硬件设施、网络、操作系统、并发用户数、系统积累的数据量、中间件等,如图 1.3 所示。如果系统中哪一个环节出现了性能瓶颈,都会严重影响系统的正常运行。图1.3 性能瓶颈可能出现在很多环节

硬件是决定一套系统性能的关键因素之一,主要包括服务器的CPU、内存、磁盘I/O使用情况,如果系统并发用户数增大而内存不足,会导致CPU和磁盘使用压力。在高性能的服务器配置情况下,可以大大提高系统性能,在单实例服务器配置的硬件条件无法满足现有性能需求的情况下,可以考虑使用多台服务器以集群模式部署,配备负载均衡服务器进行负载均衡处理。例如,某系统的配置如下。

服务器参数:

■ UNIX小型机,各服务器均独立配置。

■ 要求每台服务器至少1~2个处理器、2~4GB以上内存。

■ 集群模式。

磁盘阵列:

■ 全光纤或半光纤磁盘阵列系统一套。

■ 按不同区域或者不同时间段的数据估算存储容量设备。

■ 支持分区、克隆等功能。

■ 支持热插拔等在线扩容方式,无须停机。

网络备份设备:

■ 网络备份软件至少一套。

■ 磁带库至少一套。

■ 独立的备份服务器。

交换机、路由器:

■ 至少企业级别路由式交换机。

■ 双机负载均衡模式。

防火墙、VPN设备:

■ 企业级别的硬件防火墙。

■ 独立的硬件VPN设备。

■ 双机负载均衡模式。1.3.3 软件性能测试目标

软件开发的目标就是开发出的产品要满足用户需求,而软件性能测试的目标是在一定时间范围内尽可能地寻找软件的缺陷,并提交给开发人员进行修复,最终及时地给客户提供高质量的软件产品。而软件性能测试的目标,是通过制定性能测试策略、性能测试计划,执行性能测试,对性能问题进行定位分析和优化。

而对于当前已经交付使用的系统,性能测试的目标,则是评价当前系统的性能状况,寻找性能瓶颈,优化系统性能,测试系统未来性能及扩展性。

We b 网站性能测试应该尽可能地从用户体验的角度出发制定目标。用户体验的质量度量包括:(1)成功率。在一定的时间范围内,用户可以成功完成他想要做的事情,例如,在淘宝网成功地完成一次交易。(2)响应时间。一个页面在浏览器中完成加载所需的时间。(3)准确性。页面访问的正确性,满足预定的设计和功能要求。1.3.4 性能测试术语

1.响应时间

我们在做需求调研时一般会咨询客户方,即将研发系统的可接受的用户请求的平均响应时间是多少,可采用以下公式进行计算:

响应时间=“客户端呈现数据时间”+“网络传输时间”+“系统响应时间”

响应时间细分情况如图1.4所示。图1.4 响应时间细分

性能测试工具LoadRunner中一般通过Transaction(事务)进行响应时间的统计,Transaction是一组度量函数,分为起始事务(start transaction)、结束事务(end transaction)。我们可以根据实际情况来封装系统业务交易、定义事务,在进行压力测试后分析事务的响应时间LoadRunner的结果分析中的响应时间可分为:最大响应时间、平均响应时间、最小响应时间、标准差响应时间、90%响应时间。

响应时间受很多因素的影响,例如,网络带宽、用户数、提交事务请求数和事务类型等。响应时间越快,单位时间内处理的请求数就会越多。

2.并发用户数

用户通过客户端(如Web浏览器或Java程序)与应用程序进行交互。用户对应用服务器发送请求,这时用户的会话处于活动状态,这些用户就是“在线用户”;如果有多个类似的用户请求同时访问应用服务器,这就是“并发用户”。

并发用户数不同于在线用户数。并发一般是指多个人同时进行某一个业务交易的动作行为。所以在调研并发用户数时需要根据实际用户对业务操作的行为模式进行调研,区分业务模式。例如,对于很多企业系统,根据人员职责权限不同,业务操作频率也不一样,如普通员工是主要的系统操作者,出现并发量的可能性最大,而组长、部门经理、总经理等操作人数逐级递减,但是操作的数据量有可能逐级递增,操作的业务类型也有所改变。这时就需要注意设计性能场景时对并发用户数的配比。

确定用户的行为模式、建立真实的模拟业务场景,在性能测试中尤为重要。

3.吞吐量

从广义而言,吞吐量是用来测量系统完成的工作量。对于应用系统,可以将吞吐量定义为每个服务器实例单位时间内处理的请求量。

应用系统的吞吐量是多种因素作用的结果,其中包括用户请求数、用户请求交易特性和数据量大小,以及应用实例和数据库的性能。

吞吐量指单位时间内系统处理的客户请求的数量。系统的吞吐量就像码头每天能处理多少货物的进出一样,如图1.5所示。图1.5 系统的吞吐量就像码头每天能处理多少货物的进出一样

如果单从业务角度分析,吞吐量可以用请求数/秒、页面数/秒或处理业务数/小时等方式来衡量。

如果从网络性能角度分析,吞吐量可以用字节数/秒来衡量。

吞吐量用来衡量服务器承受的压力,根据不同的方式角度分析表达的吞吐量意义不同。

4.TPS

TPS(Transaction Per Second)即每秒系统能够处理的交易或事务的数量。它是衡量系统处理能力的重要指标。TPS也是LoadRunner中重要的性能参数指标。

5.点击率

点击率(Hit Per Second)即每秒用户向Web服务器提交的HTTP请求数。这个指标是Web应用特有的一个指标。Web应用是“请求-响应”模式,用户发出一次申请,服务器就要处理一次,所以“点击”是Web应用能够处理交易的最小单位。如果把每次点击定义为一次交易,点击率和TPS就是一个概念。不难看出,点击率越大,对服务器的压力也越大。1.3.5 网络协议

现在的大型软件系统基本上都是基于网络架构的,因此,系统性能测试离不开对网络的基本认识。

利用通信线路将分散在不同地方,具有独立功能的计算机连接起来,并按照一定的通信规则实现这些计算机之间资源与数据的共享,这样的一个计算机集合体便称为计算机网络,它们之间的通信离不开网络通信协议。

现在的网络都采用分层方式进行工作,应用层、表示层、会话层、传输层被归为高层,而网络层、数据链路层、物理层被归为底层。高层负责主机之间的数据传输,底层负责网络数据传输。当前通用的网络层次标准有OSI和TCP/IP两种。OSI是理论上的标准,TCP/IP是工业上的标准。

表1-1和表1-2是两种标准的区别与分析。表1-1 OSI参考模型续表表1-2 TCP/IP参考模型

性能测试工具 LoadRunner 的原理是通过通信协议方式传输模拟客户端对服务端发送数据来对测试对象进行测试。那么在性能测试中,如何对测试对象进行协议分析,了解该测试系统客户端与服务端之间使用的是哪种协议呢?主要从以下几方面入手。(1)通过与设计、开发人员进行沟通获取测试对象所使用的协议,通常这是最直接的方法,因为开发设计人员最清楚他们所开发的应用系统使用何种协议进行数据通信。(2)通过使用协议分析工具(如WireShark),对客户端与服务器端之间的通信过程进行捕获分析,然后确定被测对象所使用的协议。(3)通过以往的测试经验确定被测对象所使用的协议,当然,使用这种方式来确定协议的准确性没那么高。如果LoadRunner录制脚本为空或者脚本无法正常运行,再进行分析是否选择了错误的虚拟用户协议或者其他问题。1.3.6 HTTP协议

HTTP(Hyper Text Transfer Protocol),也叫超文本传输协议,是互联网(WWW)上应用最为广泛的一种网络协议,也是性能测试中接触最多、最常见的一种协议。所有的WWW文件都必须遵循这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。

HTTP协议是基于如图1.6所示的请求/响应模型工作的。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载