网站首页 > 技术文章 正文
P90 P95 P99
分析服务响应时间分布,如均值,中位值,P95值,P99值等计算
平均值
- 考察服务器性能,除了QPS数据外,还要查看响应时间,如何精准的表现服务器当前之负载
- 常用的值为:平均值(服务的平均响应时间)例如平均耗时为100ms,表示服务器当前请求的总耗时/请求总数量,通过该值,我们大体能知道服务运行情况
P50
- 表示请求中的中位数
P90
- 响应耗时从小到大排列,顺序处于90%位置的值即为P90值
P95
- 响应耗时从小到大排列,顺序处于95%位置的值即为P95值
- 100个请求按照响应时间从小到大排列,位置为95的值,即为P95值。 我们假设该值为180ms,那这个值又表示什么意思呢?
- 意思是说,我们对95%的用户的响应耗时在180ms之内,只有5%的用户的响应耗时大于180ms,据此,我们掌握了更精确的服务响应耗时信息。
P99.9
- 亚马逊经常采用P99.9值,也就是99.9%用户耗时作为指标,
- 也就是1000个用户里面,999个用户的耗时上限,如果测量与优化该值,即可保证绝大多数用户的使用体验。
- 至于P99.99值,优化成本过高,而且服务响应由于网络波动、系统抖动等不能解决之情况,故暂不考虑该指标。
如何计算P分位值
- 可以采用直方图来进行计算,该计算方式虽不是完全准确值,但精度非常高,误差较小。
- 直方图需要界定两个直方之间的跨度,一般采用等分形式
- 例如对于耗时统计需求,我们可以假定一个耗时上界,然后等分,比如划分成100个区间,对于每个响应耗时落入对应的直方
- 此外,考虑到数据分布特点,服务耗时异常数据应该只是少数,但是异常值跨度可能很大,大部分耗时数据均靠近正常值,如果采用桶等分的形式,可能会导致大量数据堆积在一个桶内中,又如何解决这个问题?
- 其实可以采用非等分的跨度划分方式,例如采用指数形式划分,耗时越低的区间,跨度越小,精度约高。
- 此外,话可以采用美团点评的实时检控官系统cat的桶跨度划分方式
- public static int computeDuration(int duration) { if (duration < 1) { return 1; } else if (duration < 20) { return duration; } else if (duration < 200) { return duration - duration % 5; } else if (duration < 500) { return duration - duration % 20; } else if (duration < 2000) { return duration - duration % 50; } else if (duration < 20000) { return duration - duration % 500; } else if (duration < 1000000) { return duration - duration % 10000; } else { int dk = 524288; if (duration > 3600 * 1000) { dk = 3600 * 1000; } else { while (dk < duration) { dk <<= 1; } } return dk; } }
- 百分位数值在互联网系统中有很大的意义。通过对百分位数值的监控与优化,我们可以将更多的用户纳入我们的监控体系中,让我们的服务能够对绝对大多数的用户提供更好的体验!在一些错误率、异常率上面我们也可以使用百分位数来进行系统可用性是否达到要求,甚至在一些新的产品特性或者AB测试上也可以用来统计分析用户对其的反响,以此来衡量该特性是否真正对用户有帮助......
衡量指标的定义
RPS:衡量服务器的吞吐能力,每秒处理器处理的请求数,是服务器并发处理能力的量化描述
- 也称 TPS 每秒处理的事务数
- RPS = 总请求数 / 请求的总耗时 QPS:每秒查询数,每秒能够响应的查询次数,QPS业绩最大吞吐能力 Avg:衡量服务器答题处理情况,平均处理每个请求耗时
- Avg = 请求总耗时 / 总请求数 P90:单个请求响应耗时从小到大排列,顺序处于90%位置的值即为P90 值。 P95:单个请求响应耗时从小到大排列,顺序处于95%位置的值即为P95 值。 P99:单个请求响应耗时从小到大排列,顺序处于99%位置的值即为P99 值。
Python计算各项指标
import numpy as np
a = np.array([1,2,3,4,5])
p_90 = np.percentile(a, 90)
p_95 = np.percentile(a, 95)
p_99 = np.percentile(a, 99)
avg = np.average(a)
min = np.min(a)
max = np.max(a)
print("p90 = {} \np95={} \np99={} \navg={} \nmin={} \nmax={}".format(p_90,p_95,p_99,avg,min,max))
文章来自https://www.cnblogs.com/moniter/p/fu-wu-xiang-ying-shi-jian-de-heng-liang-zhi-biao.html
猜你喜欢
- 2024-09-26 Java学习:基础(static、单例)(java里static用法)
- 2024-09-26 代码区、常量区、静态区(全局区)、堆区、栈区不得不了解
- 2024-09-26 “静态”之静——深入解析C++中的static关键字
- 2024-09-26 java基础3种变量类型(详解、区别)
- 2024-09-26 Java static关键字你了解多少?(java中static关键字有什么作用)
- 2024-09-26 再也不要说不知道static了(ip route-static命令详解)
- 2024-09-26 夯实基础:详解static关键字和5类场景应用
- 2024-09-26 Java学习:static 关键字概述(static关键字的作用 java)
- 2024-09-26 Java基础:static关键字作用总结(javastatic关键字详解)
- 2024-09-26 JAVA 泛型中的通配符 T,E,K,V,?你都弄懂了吗?我都总结在这
- 1514℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 573℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 513℃MySQL service启动脚本浅析(r12笔记第59天)
- 486℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 486℃启用MySQL查询缓存(mysql8.0查询缓存)
- 469℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 449℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 447℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (83)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)