课件
软件性能
软件性能是软件的一种非功能特性,它主要关注的是系统在执行功能时所表现出来的一些性质,比如说响应是否及时、资源占用的情况如何、是否稳定和安全、以及兼容性、可扩展性和可靠性等。
一般来说,我们关注的性能指标主要包括以下方面:
- 系统对于用户请求的响应时间
- 容量和数据吞吐量
- 系统的资源使用率
性能指标
性能测试主要是模拟多个用户使用系统时对性能产生的影响,因此估计用户数是一个基本的要求。对于 Web 应用来说,用户主要包括注册用户、在线用户和并发用户三种类型:
- 注册用户数指的是所有在系统注册的用户数量,但是注册用户有可能并不使用系统
- 在线用户数是所有正在访问系统的用户数(不一定做操作)
- 并发用户数是在某一给定时间里,某一个特定时刻进行会话操作的用户数
通常情况下,我们可以根据网站的统计得到不同类型用户的数据,如果没有统计数据也可以通过一定的经验进行预估。比如,大概估计一下可能的注册用户数,然后按照注册数的 20% 估计在线用户数,再按照在线数的 30% 估计并发用户数:
以新浪微博的例子:
- 用户在注册以后才能够使用,但注册用户并不是每时每刻都在使用系统,因此具体一个时刻只有部分注册用户同时在线。
- 在线用户在浏览网站的时候,会花很多的时间阅读网站的信息,所以具体到某一时刻可能只有一部分在线用户同时向系统发出请求。
- 由于有些注册用户可能长时间不登陆网站,所以不能够使用注册用户数作为性能的指标,一般来说性能测试更关心的是并发用户数。
响应时间
响应时间是一个重要的性能指标,它是从客户端发出请求到获得响应的整个过程所经历的时间。下图显示了从客户端发出请求到获得响应的整个过程:
其中:
- C1 表示的是用户请求发出前在客户端需要完成的预处理的时间
- N1 是请求由客户端发出并且达到应用服务器的时间
- A1 是应用服务器对请求进行处理的时间
- 如果需要进行数据库的相关操作,N2 是应用服务器把请求发送到数据库服务器所需要的时间
- A2 是数据库服务器对请求进行处理的时间
- N3、A3、N4 和 C2 分别是从数据库服务器经过网络、应用服务器到客户端返回处理结果的时间
对于用户来说,响应时间是上面所有时间的总和。对于系统来说,是从应用服务器接收请求到返回结果的这段时间。
吞吐量、资源利用率
吞吐量、资源利用率是从系统管理的角度所关心的两个性能指标。
吞吐量(Throughout)是指单位时间里系统处理客户请求的数量,它反映的是软件系统对性能压力的一个承载能力。一般可以用「请求数/秒」、「页面数/秒」、「访问数/秒」、或者「处理业务数/小时」等单位来衡量。
资源利用率指的是系统资源的使用程度,比如说服务器 CPU 利用率、内存利用率、磁盘利用率、网络带宽利用率等。可以用「资源实际使用 / 总的资源」的比例来表示,如 CPU 利用率 68%、内存利用率 55% 等。
性能测试
性能测试是通过自动化的测试工具或手段,来模拟多种正常情况、峰值情况以及异常负载条件,为获取或验证系统性能指标而进行的测试。
负载测试和压力测试是性能测试的两种主要类型:
- 负载测试:是通过不断地加载系统负载,比如逐渐增加模拟用户的数量,来观察不同负载下系统的响应时间、数据吞吐量以及系统占用资源的情况,以检验系统的行为和特性,发现系统可能存在的性能问题。
- 压力测试:是在强负载,比如大数据量或大量并发用户等条件下对系统进行测试,来查看系统在峰值使用情况下的操作行为,从而有效地发现系统的某项功能隐患是否具有良好的容错能力和可恢复能力等。
举例说明两者的区别:如果要测试一个人能够扛多少斤重物,负载测试就要确定在200斤情况下这个人能否坚持5分钟,压力测试则是测试在200斤、300斤、400斤等不断增重的情况下这个人的表现,什么时候会失败,失败以后有什么表现,重新再扛200斤是否正常。
压力测试类型
压力测试也有很多不同的类型:
- 稳定性测试:是保持在高负载条件下,持续运行24小时以上,来查看系统的表现
- 破坏性测试:是通过不断地加载来快速造成系统崩溃,以便让问题尽快暴露出来
- 渗入测试:是通过长时间运行,来发现像内存泄漏、垃圾收集或者一些其他的问题,以检验系统的健壮性
- 峰谷测试:是采用高低突变这样的方式来进行测试,先加载到高水平的负载,然后急剧降低负载,稍微平息一段时间,再加载到高水平的负载,如此反复来查找系统的问题
大数据量测试、疲劳强度测试
大数据量测试、疲劳强度测试也是性能测试的内容。
- 大数据量测试:
- 主要是检测在数据量比较大的时候系统的性能状况。
- 一般又包括独立数据量测试和综合数据量测试。综合数据量测试是系统在具备一定数据量时,在负载压力测试下考察业务是否能够正常进行的测试。
- 目标:测试数据量较大时系统的性能状况。
- 疲劳强度测试:
- 是在系统稳定运行的情况下,通过长时间地运行系统来检测系统无故障稳定运行的能力。
- 目标:通过综合分析交易执行指标和资源监控指标来测试系统长时间无故障稳 定运行的能力。
性能测试策略
对于一个 Web 应用来说,服务器端、数据库、网络、客户端这些都是影响系统性能的因素,那么应该采用什么样的测试策略来确定系统发生问题的原因?
对于客户端
可以使用测试工具,在机器上模拟大量的虚拟用户进行并发操作来测试系统,通过综合分析各种指标,最终来评价系统的性能或者发现问题。
对于网络性能
可以使用相应的监控工具,来测试网络的带宽、延时、负载和TCP端口变化等因素对响应时间的影响。
对于服务器性能
测试的关键点是资源占用情况、数据库性能和故障报警。可以使用监控工具来监测服务器的 CPU 占用、内存消耗和故障情况,检查数据库的读写、缓存、加锁和事务处理等状态。
性能测试工具
性能测试必须要依靠自动化的工具,目前有很多流行的性能测试工具,LoadRunner 是惠普公司开发的一种预测系统行为和性能的负载测试工具,它是使用非常广泛的工业标准级的性能测试工具,可以模拟上千万用户的并发负载,来实时监测系统性能并且确认和查找问题。
JMeter 是目前非常流行的开源压力测试工具,可用于 Web 服务器的性能测试,也可以对数据库、FTP、LDAP服务器进行测试,可与Junit、Ant等工具 集成。它可以针对服务器、网络或其他被测试对象等大量并发负载进行强度测试, 分析在不同压力负载下系统的整体性能。