性能测试应该怎么做?

简介:

偶然间看到了阿里中间件Dubbo的性能测试报告(http://t.cn/R53tm9q),我觉得这份性能测试报告让人觉得做这性能测试的人根本不懂性能测试,我觉得这个测试报告会把大众带沟里去,所以,想写算这篇文章,做一点科普。

首先,这份测试报告里的主要问题如下:

  1. 用的全是平均值。老实说,平均值是非常不靠谱的。
  2. 响应时间没有和吞吐量TPS/QPS挂钩。而只是测试了低速率的情况,这是完全错误的。
  3. 响应时间和吞吐量没有和成功率挂钩。

为什么平均值不靠谱

关于平均值为什么不靠谱,我相信大家读新闻的时候经常可以看到,平均工资,平均房价,平均支出,等等这样的字眼,你就知道为什么平均值不靠谱了。(这些都是数学游戏,对于理工科的同学来说,天生应该有免疫力)

软件的性能测试也一样,平均数也是不靠谱的,这里可以参看这篇详细的文章《Why Averages Suck and Percentiles are Great》(http://t.cn/R53cChA),我在这里简单说一下。

我们知道,性能测试时,测试得到的结果数据不总是一样的,而是有高有低的,如果算平均值就会出现这样的情况,假如,测试了10次,有9次是1ms,而有1次是1s,那么平均数据就是100ms,很明显,这完全不能反应性能测试的情况,也许那1s的请求就是一个不正常的值,是个噪点。所以,我们会在一些评委打分中看到要去掉一个最高分一个最低分,然后再算平均值。

另外,中位数(Mean)可能会比平均数要稍微靠谱一些,所谓中位数的意就是把将一组数据按大小顺序排列,处在最中间位置的一个数叫做这组数据的中位数 ,这意味着至少有50%的数据低于或高于这个中位数。

当然,最为正确的统计做法是用百分比分布统计。也就是英文中的TP – Top Percentile ,TP50的意思在,50%的请求都小于某个值,TP90表示90%的请求小于某个时间。

比如:我们有一组数据:[ 10ms, 1s, 200ms, 100ms],我们把其从小到大排个序:[10ms, 100ms, 200ms, 1s],于是我们知道,TP50,就是50%的请求ceil(4*0.5)=2时间是小于100ms的,TP90就是90%的请求ceil(4*0.9)=4时间小于1s。于是:TP50就是100ms,TP90就是1s。

我以前在路透做的金融系统响应时间的性能测试的要求是这样的,99.9%的请求必须小于1ms,所有的平均时间必须小于1ms。两个条件的限制。

为什么响应时间(latency)要和吞吐量(Thoughput)挂钩

系统的性能如果只看吞吐量,不看响应时间是没有意义的。我的系统可以顶10万请求,但是响应时间已经到了5秒钟,这样的系统已经不可用了,这样的吞吐量也是没有意义的。

我们知道,当并发量(吞吐量)上涨的时候,系统会变得越来越不稳定,响应时间的波动也会越来越大,响应时间也会变得越来越慢,而吞吐率也越来越上不去(如下图所示),包括CPU的使用率情况也会如此。所以,当系统变得不稳定的时候,吞吐量已经没有意义了。吞吐量有意义的时候仅当系统稳定的时候。

所以,吞吐量的值必需有响应时间来卡。比如:TP99小于100ms的时候,系统可以承载的最大并发数是1000qps。这意味着,我们要不断的在不同的并发数上测试,以找到软件的最稳定时的最大吞吐量。

为什么响应时间吞吐量和成功率要挂钩

我们这应该不难理解了,如果请求不成功的话,都还做毛的性能测试。比如,我说我的系统并发可以达到10万,但是失败率是40%,那么,这10万的并发完全就是一个笑话了。

性能测试的失败率的容忍应该是非常低的。对于一些关键系统,成功请求数必须在100%,一点都不能含糊。

如何严谨地做性能测试

一般来说,性能测试要统一考虑这么几个因素:Thoughput吞吐量,Latency响应时间,资源利用(CPU/MEM/IO/Bandwidth…),成功率,系统稳定性。

下面的这些性能测试的方式基本上来源自我的老老东家汤森路透,一家做real-time的金融数据系统的公司。

一,你得定义一个系统的响应时间latency,建议是TP99,以及成功率。比如路透的定义:99.9%的响应时间必需在1ms之内,平均响应时间在1ms以内,100%的请求成功。

二,在这个响应时间的限制下,找到最高的吞吐量。测试用的数据,需要有大中小各种尺寸的数据,并可以混合。最好使用生产线上的测试数据。

三,在这个吞吐量做Soak Test,比如:使用第二步测试得到的吞吐量连续7天的不间断的压测系统。然后收集CPU,内存,硬盘/网络IO,等指标,查看系统是否稳定,比如,CPU是平稳的,内存使用也是平稳的。那么,这个值就是系统的性能

四,找到系统的极限值。比如:在成功率100%的情况下(不考虑响应时间的长短),系统能坚持10分钟的吞吐量。

五,做Burst Test。用第二步得到的吞吐量执行5分钟,然后在第四步得到的极限值执行1分钟,再回到第二步的吞吐量执行5钟,再到第四步的权限值执行1分钟,如此往复个一段时间,比如2天。收集系统数据:CPU、内存、硬盘/网络IO等,观察他们的曲线,以及相应的响应时间,确保系统是稳定的。

(注:在路透,路透会用第二步得到的吞吐量乘以66.7%来做为系统的软报警线,80%做为系统的硬报警线,而极限值仅仅用来扛突发的peak)

是不是很烦锁?是的,只因为,这是工程,工程是一门科学,科学是严谨的。

欢迎大家也分享一下你们性能测试的经验和方法。


作者:陈皓

来源:51CTO

相关文章
|
程序员
阿里技术高P访谈之“呆萌”程序员蒋晓伟为何从Facebook到阿里巴巴
跟蒋晓伟约在一个下午进行访谈,他的花名叫量仔,这个名号让笔者的第一感觉是“高富帅”。然而,当见到本尊之后,才发现他完全就是一个“呆萌”版的程序员,这也印证了其在阿里巴巴内网上的标签——“头像蛮萌的”。
11411 2
|
2月前
|
人工智能 API 语音技术
技术实践|端云协同的百炼语音AI软件开发套件
Qwen-Audio-3.0移动端SDK是覆盖Android、iOS、HarmonyOS的语音AI套件,以C++为核心,提供可自由组合的原子能力(KWS、AEC、VAD、TTS等),通过统一API连接百炼云端ASR/TTS/Realtime等大模型,支持实时识别、合成、对话、翻译等场景。
655 4
|
3月前
|
SQL 关系型数据库 Apache
15 分钟搭建 PostgreSQL + Apache Iceberg + Apache Doris 的湖仓分析平台
Apache Iceberg 是主流开放湖仓表格式,支持ACID、Schema演进、隐藏分区与时间旅行。本文以 PostgreSQL→OLake→Iceberg→Doris 为例,演示如何在单台EC2上15分钟搭建端到端实时分析链路,兼顾开源、低成本与高性能。
212 0
|
前端开发
uni-app中使用 async + await 实现异步请求同步化
uni-app中使用 async + await 实现异步请求同步化
4167 0
uni-app中使用 async + await 实现异步请求同步化
|
4月前
|
存储 安全 算法
企业文档水印溯源防泄密方案:从模板、审批到外发拦截的落地实践
在企业日常办公中,合同、研发图纸、财务报表、项目方案等文档往往会通过下载、拷贝、聊天、邮件、网页上传等方式流转。如果缺少终端侧的溯源管控,一旦文件外泄,企业很难快速定位具体操作人、终端设备和外泄路径。 本文从终端数据安全落地视角,介绍一套文档水印防泄密方案:通过多类型水印模板、水印移除审批、落地水印固化、外发水印拦截等能力,实现 “文件可标识、操作可留痕、泄露可追溯” 的基础防护闭环。
452 0
企业文档水印溯源防泄密方案:从模板、审批到外发拦截的落地实践
|
4月前
|
人工智能 移动开发 安全
Night Plan 夜间算力特惠来袭!Qoder+Meoo 双产品 Qwen3.7 夜间低至 2 折
阿里云Night Plan上线!每晚22:00-次日8:00,Qwen3.7模型低至2折,算力成本直降80%。Qoder全系(含Desktop/CLI/Work)与Meoo秒悟均享优惠,试用/付费用户自动生效,无需开通。夜间挂机跑任务,白天专注调试,降本增效一步到位。
|
4月前
|
缓存 人工智能 API
阿里云Qwen3.7-Plus百炼AI模型官价发布,附免费100万Tokens攻略,输入输出详细费用价格表
阿里云百炼Qwen3.7-Plus是多模态智能体模型,支持文图视频输入与文本输出,具备工具调用、缓存优化等能力。当前享8折优惠:输入1.6元/百万tokens(原价2元),输出6.4元/百万tokens(原价8元),新用户可免费领100万tokens。在阿里云百炼官网:https://t.aliyun.com/U/fPVHqY 免费领取千万Tokens
1763 0
|
11月前
|
人工智能 自然语言处理 数据可视化
大型企业如何建好用好 BI 系统?方案与价值双解析
在数据驱动时代,BI系统已成为企业决策的核心。本文综述主流BI工具,重点解析瓴羊Quick BI的智能分析、多端协同与AI Agent能力,助力企业高效构建现代化BI体系。
|
人工智能 缓存 并行计算
用数学重构 AI的设想:流形注意力 + 自然梯度优化的最小可行落地
本文提出两个数学驱动的AI模块:流形感知注意力(D-Attention)与自然梯度优化器(NGD-Opt)。前者基于热核偏置,在局部邻域引入流形结构,降低计算开销;后者在黎曼流形上进行二阶优化,仅对线性层低频更新前置条件。二者均提供可复现代码与验证路径,兼顾性能与工程可行性,助力几何感知的模型设计与训练。
868 1

热门文章

最新文章