(转载)性能测试应该怎么做?

转载,性能,测试,应该,怎么 · 浏览次数 : 88

小编点评

**性能测试的正确方法** 性能测试是软件开发过程中非常重要的环节,它可以帮助开发者找到软件性能瓶颈,从而优化软件性能。 **性能测试的常用方法包括:** * 平均值(Average) * 中位数(Mean) * 吞吐量(Throughput) * 响应时间(Latency) * 吞吐量和成功率 **平均值(Average)** 平均值是指所有测试结果的总和除以测试数据数量。然而,平均值并不能反映性能测试结果的真实情况,因为平均值会受到极端值的影响。 **中位数(Mean)** 中位数是指测试数据中位于中间位置的值。中位数比平均值更能反映性能测试结果的平均值,因为它对极端值更加敏感。 **吞吐量(Throughput)** 吞吐量是指每秒处理的数据量。吞吐量可以用于测试软件的并行性,因为它可以表示多个请求在同一个时间被处理的次数。 **响应时间(Latency)** 响应时间是指请求处理时间,从请求发出到响应返回的平均时间。响应时间可以用于测试软件的延迟,并可以用来评估并发性。 **吞吐量和成功率** 吞吐量和成功率是性能测试中非常重要的指标。吞吐量是指每秒处理的数据量,而成功率是指请求成功处理的次数与总请求数的比率。 **一些性能测试的特殊方法包括:** * Soak Test:Soak Test 是在持续的测试中保持系统负载的方式,可以帮助开发者找到性能瓶颈。 * Burst Test:Burst Test 是在指定时间内执行多个测试的测试方式,可以帮助开发者找到性能瓶颈。 * 低吞吐量和网络小包的测试:在低吞吐量的情况下,可能会导致响应时间上升,因此开发者需要根据实际情况选择测试方法。

正文

(转载)性能测试应该怎么做?

转自:https://coolshell.cn/articles/17381.html 

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

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

1)用的全是平均值。老实说,平均值是非常不靠谱的。

2)响应时间没有和吞吐量TPS/QPS挂钩。而只是测试了低速率的情况,这是完全错误的。

3)响应时间和吞吐量没有和成功率挂钩。

为什么平均值不靠谱

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

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

我们知道,性能测试时,测试得到的结果数据不总是一样的,而是有高有低的,如果算平均值就会出现这样的情况,假如,测试了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(40.5)=2时间是小于100ms的,TP90就是90%的请求ceil(40.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等,观察他们的曲线,以及相应的响应时间,确保系统是稳定的。

六、低吞吐量和网络小包的测试。有时候,在低吞吐量的时候,可能会导致latency上升,比如TCP_NODELAY的参数没有开启会导致latency上升(详见TCP的那些事),而网络小包会导致带宽用不满也会导致性能上不去,所以,性能测试还需要根据实际情况有选择的测试一下这两咱场景。

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

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

与(转载)性能测试应该怎么做?相似的内容:

(转载)性能测试应该怎么做?

(转载)性能测试应该怎么做? 转自:https://coolshell.cn/articles/17381.html 偶然间看到了阿里中间件Dubbo的性能测试报告,我觉得这份性能测试报告让人觉得做这性能测试的人根本不懂性能测试,我觉得这份报告会把大众带沟里去,所以,想写下这篇文章,做一点科普。 首

[转帖]Linux系统top命令中的io使用率,很多人都误解了它的具体含义

https://baijiahao.baidu.com/s?id=1641356547223820839&wfr=spider&for=pc 最近在做连续数据流的缓冲系统,C语言代码实现后,粗略测试了下,功能上应该没有问题。那么,接下来就该测试性能了。输入 top 命令,的确可以看到一系列 cpu

[转帖]性能测试:关键性能指标与性能分析

关键指标 应用性能指标 响应时间(Response Time): 指从客户端发送一个请求开始计时,到客户端接收到从服务器端返回的响应结果结束所经历的所有时间。响应时间组成:请求发送时间、网络传输时间和服务器处理时间三部分组成。响应时间越短越好,目前接受的时间是2/5/8秒。 吞吐量(Throughp

[转帖]webpagetest 私有化部署

https://www.jianshu.com/p/83bd6b3473ae 介绍 webpagetest 是一款开源的 web 性能测试工具,开源地址,每个人都可在其公共实例上对自己的 web 应用进行性能测试(web应用必须提供公网IP或域名) wpt001.png 具体的使用方法、参数设置,可

[转帖]《服务器应用场景性能测试方法 虚拟化》解读

《服务器应用场景性能测试方法 虚拟化》解读 https://aijishu.com/a/1060000000343436 今天为大家带来《服务器应用场景性能测试方法 虚拟化》的详细解读。 《服务器应用场景性能测试方_虚拟化》起草单位包括中国电子技术标准化研究院、云宏信息科技股份有限公司、飞腾信息技术

[转帖]网络传输性能netperf测试方法和下载

简介 Netperf是一种网络性能的测试工具,主要针对基于TCP或UDP的传输。Netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求/应答(request/reponse)模式。 Netperf工具以client/server

[转帖]NVMe-oF以太网SSD:三星说第一家,东芝/Marvell两年前就有了?

https://aijishu.com/a/1060000000238559 目录 -到底谁是第一款原生NVMe-oFSSD? -连接方案&性能测试 -从2019年拖到现在:还能引领存储系统潮流吗? -以太网SSD应用:不只是块设备? 在ODCC 2021开放数据中心峰会上,三星展出了Etherne

[转帖]netperf - 网络测试工具

1. 概述 Netperf是一种网络性能的测量工具,主要针对基于TCP或UDP的传输。Netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求/应答(request/reponse)模式。Netperf测试结果所反映的是一个系统能

[转帖]Linux 异步 I/O 框架 io_uring:基本原理、程序示例与性能压测

io_uring是 2019 年 Linux 5.1内核首次引入的高性能异步 I/O 框架,能显着加速 I/O 密集型应用的性能。但如果你的应用已经在使用传统 Linux AIO 了,并且使用方式恰当, 那io_uring并不会带来太大的性能提升—— 根据测试,即便打开高级特性,也只有 5%。除非你

[转帖]perf学习-linux自带性能分析工具

存储技术为满足层出不穷应用的海量数据存储需求,从物理介质到技术架构也同样发生了天翻地覆的变革。无论技术如何更新换代,其目的都是为了更好的提供高性能,高容量,高可用的数据服务。本系列文章会对存储系统的测试和调试工具做一个介绍。 dd - Linux世界中的搬运工 FIO – IO压力测试工具 vdbe