性能重要衡量指标-百分位数
在性能监控中什么是最好的度量—平均数还是百分位数?
百分位数和平均值是用于描述数据集中趋势和分布的统计量,它们之间的主要区别在于:
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
函数接受一个数组和一个百分位数作为参数,并返回该数组的对应百分位数的值。这个函数首先对数组进行排序,然后根据给定的百分位数计算相应的值。