有关性能测试的一点小结

标签: 测试 可扩展性 性能测试 | 发表时间:2013-09-27 17:35 | 作者:juvenxu
出处:http://www.juvenxu.com

任何一个严肃的软件或者网站都应该有明确的性能需求,这个需求在软件设计之初就需要考虑,因而成为了影响软件或者网站架构的一个重要因素。从这个角度来看,性能/可扩展性这样的非功能需求其实比很多功能需求更加重要。为了明确满足性能需求,性能测试自然是必不可少的一环,把这个环节做成熟,是我最近一直在学习考虑的事情。

然而这件事情不简单,Herry H. Liu 在他的 Software Performance and Scalability: A Quantitative Approach 一书中写了这么一段话:

s4136358

It is generally agreed in the software community that it takes at least five years for a software engineer to become proficient in testing, optimizing, and tuning the performance and scalability of a software system.

且不说这件做好这样的事情是否真需要积累五年那么长时间,就我最近的一些实践来看,光测试一个简单的 HTTP 服务并看懂并理解各项指标就不是件容易的事情。例如说,我们通常关心的一个网站性能指标是响应时间(Response Time),即我发出一个请求到我收到完整返回的时间,以下是我一个测试的结果报告:

Gatling_Stats_-_reqeust_1

当并发的请求数到达某个数值的时候(图中大概为160),响应时间直接上升并产生了相当比例的失败返回。这大概表明了系统的压力极限,那好,下一步要分析的是,这个压力极限背后的瓶颈是什么?哪一块资源不够用了?这就好比,当一个人跑步跑了一个小时之后,跑不动了,原因是什么?缺水?缺糖?腿部肌肉锻炼不够?心肺功能跟不上?脚拐到了?原因多种多样……

对于一个软件系统来说,需要分析的地方大概有:CPU、内存、磁盘I/O、网络I/O、外部系统依赖;如果是Java应用内部的性能问题,还要分析JVM的GC、线程数等等;此外,还有数据库性能,或者其他我想不到的…… 可以看到,这其中的每个点,都是一个很大的主题、都涉及很多理论、很多工具,当所有这些融合在一起工作,找出其中出问题的地方显然不是件容易的事情。这和上医院看病很像,一个表面看起来很简单的感冒,搞大了医生会验血、验尿、做B超甚至CT,道理是一样的,无非就是收集全面的数据并基于此得出更准确的判断。

提到性能测试就必须提一下系统的可扩展性,单独测试单个用户请求的响应时间意义是有限的,除了响应时间我们还要关心吞吐量(Throughput),即单位时间内系统能处理的请求数量,一个常见的吞吐量指标就是TPS(Transaction Per Second),每秒完成的交易数。需要注意的是TPS这样的数字和并发数是不一样的,一秒内可能完成了1000个交易,但同一时间的并行的交易可能只有200(前0.2秒200并行,完成后,再来200并行,以此类推)。总之我们希望,在响应时间位于可接收的范围内这一前提下,系统的吞吐量尽可能大。至于可扩展性,通常指通过水平扩展,指的是能够通过水平增加硬件(单台机器2G内存变8G是垂直扩展,搞4台2G机器是水平扩展)提高系统吞吐量。当然,如果不清楚系统的资源瓶颈,扩展也就无从谈起。另外,如果系统架构天生不支持水平扩展(例如,把用户状态缓存到应用程序内存中,应用程序扩展到多台机器后,这些状态咋办?),那就死翘翘了。

我相信,有基本素养的开发人员/测试人员,都会手动做一些性能测试,例如用简单的 Apache ab 看下系统性能。然而,把性能测试正式地集成到开发流程中,不是件容易的事情。 ThoughtWorks Radar 所提倡的 Performance testing as a first-class citizen 说的大概也就是这个事情。

Technology_Radar_May_2013___ThoughtWorks

如果能做到这一点,好处是显而易见的,你几乎每天都能很方便的得到系统性能报告,当代码变更导致系统性能下降的时候,能快速得到反馈,能大大降低性能瓶颈排查的成本。当你对系统进行性能调优的时候,也能得到及时的反馈。然而,为了做到这一点,你至少需要:

1. 尽量模拟真实线上的环境
2. 全自动、快速地持续部署
3. 精心设计的测试用例
4. 量化的指标以实现自动验证

这几条要求团队拥有非常全面的技能,能把握性能需求,能设计可靠的测试用例、能分析量化的指标、能持续部署系统……你感受下,看看自己团队是否有这个能力。

软件性能和可扩展性是个非常有意思也非常有挑战的主题,以上是我首次真正去学习实践的小小总结,我会进一步学习思考,记录心得。

相关 [性能 测试] 推荐:

mongodb性能测试

- - 数据库 - ITeye博客
1) Mongodb的非安全插入方式,在一开始插入性能是非常高的,但是在达到了两千万条数据之后性能骤减,这个时候恰巧是服务器24G内存基本占满的时候(随着测试的进行mongodb不断占据内存,一直到操作系统的内存全部占满),也就是说Mongodb的内存映射方式,使得数据全部在内存中的时候速度飞快,当部分数据需要换出到磁盘上之后,性能下降很厉害.

WebService性能测试

- - ImportNew
(本文也会在最下面通俗的介绍). 这里给一个站内大哥的讲解: http://www.cnblogs.com/Leo_wl/archive/2010/05/20/1740205.html. 简单点就是测试WebService的一个工具. 官网地址: http://www.soapui.org/. ps:官网是英语的,如果你英语不好的话可以使用谷歌浏览器或360极速浏览器,它可以自动把英文转换成中文.

性能测试工具 CBenchmark

- lele - 开源中国社区最新软件
CBenchmark—-CharlesCui’s Benchmark 这是我实现的一款性能测试工具,之前在工作中常用LoadRunner之类的工具来完成性能测试,但受限于LR极其昂贵的Lisence以及难以定制的SDK,于是我用C/C++实现了这个工具,并借助Linux系统对线程和进程的良好调度,可以实现极高的并发压力.

浏览器性能测试

- - Taobao QA Team
浏览器作为一个浏览网页的平台,自身的性能直接影响网页的解析速度、渲染,而浏览器的性能一般又是由浏览器的内核来决定. 虽然浏览器的评测方法有很多,但是权威的浏览器性能测试方法主要有以下几种:. Acid3测试是检测浏览器与Web标准兼容性的主要方法,也是目前行业中最权威的测试. Acid3是由网页标准计划小组(Web Standards Project, WaSP)设计,测试焦点集中在ECMAScript、DOM Level 3、Media Queries和data: URL,浏览器开启 http://acid3.acidtests.org/测试页面后,页面会不断加载功能、直接给予分数.

【闲说】性能测试

- - 并发编程网 - ifeve.com
版权声明:本文为本作者原创文章,转载请注明出处. 感谢 码梦为生| 刘锟洋 的投稿. 性能测试是一件看起来不简单,操作起来确更困难的事情,我认为,每认真做一次性能测试,一定会有不同收获,而每次性能测试暴露的问题,现象都不是仅仅涉及Java,tomcat这么简单,简单说就是光会写代码是无法做好性能测试的.

Android应用性能测试

- - CSDN博客推荐文章
java虚拟机有内存使用上限的限制. adb shell进入手机,这此参数被纪录在/system/build.prop中,如果想直接查看可以使用adb shell getprop. 单个应用程序最大内存限制,超过这个值会产生OOM. 单个java虚拟机最大的内存限制,超过这个值会产生OOM. android程序内存一般限制在16M,当然也有24M的,而android程序内存被分为2部分:.

web性能测试指标

- - 研发管理 - ITeye博客
Web性能测试的部分概况一般来说,一个Web请求的处理包括以下步骤:. (2)web server接受到请求,进行处理;. (3)web server向DB获取数据;. (4)webserver生成用户的object(页面),返回给用户. 给客户发送请求开始到最后一个字节的时间称为响应时间(第三步不包括在每次请求处理中).

node.js调研与服务性能测试

- lostsnow - 淘宝数据平台与产品部官方博客 tbdata.org
这几天对nodejs进行了一下简单的调研. 考虑到今后的应用场景, 实现了一个简单的memcache代理服务.. 内部维护了一个50连接的简单连接池, 通过长连接与memcache服务器相连.. 同时对外提供socket代理服务与http restful服务. 测试使用编译安装的node.js v0.3.1,未使用任何第三方modules.

HBase随机读写性能测试

- jiaosq - NoSQLFan
本文转载自淘宝网BlueDavy同学的博客,文章基于淘宝对HBase的大量应用,给出了一个HBase的随机读写性能测试结果,对测试环境、配置及性能参数分析都有较详细的描述,推荐给各位NoSQL Fans. 根据最近生产环境使用的经验,更多的项目的采用,以及采用了更加自动的测试平台,对HBase做了更多的场景的测试,在这篇blog中来分享下纯粹的随机写和随机读的性能数据,同时也分享下我们调整过后的参数.

NoSQL性能测试白皮书

- - 博客园_知识库
  最近,bankmark公司针对目前市面上流行的NoSQ数据库SequoiaDB、Cassandra、MongoDB进行了详细的性能测试,InfoQ经授权发布中文版白皮书.   作为一项快速发展的极具创新性的IT技术,NoSQL 技术在大数据和实时网页应用中的运用在最近几年呈现了大量的增长. 因为NoSQL数据库的存储允许更灵活的开发方式和执行方式,这些NoSQL数据库能够在许多的工商业应用领域很好地替代传统关系型数据库(RDBMS).