性能重要衡量指标-百分位数

前端精髓

共 2088字,需浏览 5分钟

 ·

2024-04-11 17:48


在性能监控中什么是最好的度量—平均数还是百分位数?

百分位数和平均值是用于描述数据集中趋势和分布的统计量,它们之间的主要区别在于:

1.平均值(均值):

平均值是数据集中所有数值的总和除以数据点的数量。平均值对数据集中所有数据点进行了平均处理,反映了数据的集中趋势。平均值容易受到极端值(异常值)的影响,因为它是所有数据点的总和除以数量。


2.百分位数:

百分位数是将数据集按大小排序后,处于特定百分比位置的数值。例如,第50百分位数是数据集的中位数,表示有50%的数据小于或等于这个值,50%的数据大于或等于这个值。百分位数可以帮助了解数据的分布情况,识别数据集中不同位置的值。


总结:

平均值是数据集的总体平均,反映数据的集中趋势,易受异常值影响。百分位数表示数据集中处于特定百分比位置的值,有助于了解数据的分布情况,不受异常值的影响。


如果将一组数据从小到大排序,并计算相应的累计百分位,则某一百分位所对应数据的值就称为这一百分位的百分位数。可表示为:一组n个观测值按数值大小排列。如,处于p%位置的值称第p百分位数


用我们软件开发行业的例子通俗来讲就是,假设有100个请求,按照响应时间从小到大排列,位置为X的值,即为PX值。


P1就是响应时间最小的请求,P10就是排名第十的请求,P100就是响应时间最长的请求。

在真正使用过程中,最常用的主要有P50(中位数)、P95、P99。


P50: 即中位数值。100个请求按照响应时间从小到大排列,位置为50的值,即为P50值。如果响应时间的P50值为200ms,代表我们有半数的用户响应耗时在200ms之内,有半数的用户响应耗时大于200ms。如果你觉得中位数值不够精确,那么可以使用P95和P99.9


P95:响应耗时从小到大排列,顺序处于95%位置的值即为P95值。

还是采用上面那个例子,100个请求按照响应时间从小到大排列,位置为95的值,即为P95值。我们假设该值为200ms,那这个值又表示什么意思呢?

意思是说,我们对95%的用户的响应耗时在200ms之内,只有5%的用户的响应耗时大于200ms,据此,我们掌握了更精确的服务响应耗时信息。


P99.9:许多大型的互联网公司会采用P99.9值,也就是99.9%用户耗时作为指标,意思就是1000个用户里面,999个用户的耗时上限,通过测量与优化该值,就可保证绝大多数用户的使用体验。至于P99.99值,优化成本过高,而且服务响应由于网络波动、系统抖动等不能解决之情况,因此大多数时候都不考虑该指标。


在JavaScript中计算百分位数可以通过不同的方法实现。以下是一种常见的方法,使用JavaScript来计算给定数组的百分位数:


// 计算数组的百分位数function percentile(arr, p) {    if (arr.length === 0) {        return null;    }
arr.sort(function(a, b) { return a - b; });
var index = (p/100) * (arr.length - 1); var lower = Math.floor(index); var upper = Math.ceil(index);
if (lower === upper) { return arr[lower]; }
var lowerValue = arr[lower]; var upperValue = arr[upper]; return lowerValue + (upperValue - lowerValue) * (index - lower);}
// 示例用法var data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];var p = 75; // 想要计算的百分位数,比如第75百分位数
var result = percentile(data, p);console.log("第" + p + "百分位数为: " + result);


在这个示例中,percentile 函数接受一个数组和一个百分位数作为参数,并返回该数组的对应百分位数的值。这个函数首先对数组进行排序,然后根据给定的百分位数计算相应的值。


浏览 7
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报