P99 是如何计算的?

服务响应时间的重要衡量指标——百分位数值P90/P95/P99.9 做性能测试之前需要设置性能阈值来判断服务性能是否符合预期。通常,对服务相应时间的衡量指标有Min(最小响应时间)、Max(最大响应时间)、Avg(平均响应时间)等。其中比较常用的就是平均值,但是平均值的计算方式会把一些异常的值平均掉,进而会掩盖一些问题, 阅读详情

点击上方“芋道源码”,选择“设为星标”

管她前浪,还是后浪?

能浪的浪,才是好浪!

每天 10:33 更新文章,每天掉亿点点头发...

源码精品专栏

 

来源:www.kawabangga.com

/posts/4284

364ebea3aaec5764bbbd523ac0b6ac32.jpeg


Latency(延迟)是我们在监控线上的组件运行情况的一个非常重要的指标,它可以告诉我们请求在多少时间内完成。监控 Latency 是一个很微妙的事情,比如,假如一分钟有 1亿次请求,你就有了 1亿个数字。如何从这些数字中反映出用户的真实体验呢?

之前的公司用平均值来反应所有有关延迟的数据,这样的好处是计算量小,实施简单。只需要记录所有请求的一个时间总和,以及请求次数,两个数字,就可以计算出平均耗时。

但问题是,平均耗时非常容易掩盖真实的问题。比如现在有 1% 的请求非常慢,但是其余的请求很快,那么这 1% 的请求耗时会被其他的 99% 给拉平,将真正的问题掩盖。

所以更加科学的一种监控方式是观察 P99/P95/P90 等,叫做 Quantile。简单的理解,P99 就是第 99% 个请求所用的耗时。假如 P99 现在是 10ms,那么我们可以说 “99% 的请求都在 10ms 内完成”。虽然在一些请求量较小的情况下,P99 可能受长尾请求的影响。但是由于 SRE 一般不会给在量小的业务上花费太多精力,所以这个问题并不是很大。

但是计算就成了一个问题。P99 是计算时间的分布,所以我们是否要保存下来 1 亿个请求的时间,才能知道第 99% 的请求所用的时间呢?

这样耗费的资源太大了。考虑到监控所需要的数据对准确性的要求并不高。比如说 P99 实际上是 15.7ms 但是计算得到数据是 15.5ms,甚至是 14ms,我认为都是可以接受的。

我们关注更多的是它的变化。“P99 耗时从 10.7ms 上涨到了 14ms” 和 “P99耗时从 11ms 上涨到了 15.5ms” 这个信息对于我们来说区别并不是很大。(当然了,如果是用于衡量服务是否达到了服务等级协议 SLO 的话,还是很大的。这样需要合理地规划 Bucket 来提高准确性)。

所以基于这个,Prometheus 采用了一种非常巧妙的数据结构来计算 Quantile: Histogram。

Histogram 本质上是一些桶。举例子说,我们为了计算 P99,可以将所有的请求分成 10 个桶,第一个存放 0-1ms 完成的请求的数量,后面 9 个桶存放的请求耗时上区间分别是 5ms、10ms、50ms、100ms、200ms、300ms、500ms、1s、2s,这样只要保存 10 个数字就可以了。

要计算 P99 的话,只需要知道第 99% 个数字落在了哪一个桶,比如说落在了 300ms-500ms 的桶,那我们就可以说现在的 99% 的请求都在 500ms 之内完成(这样说不太准确,如果准确的说,应该是第 99% 个请求在 300ms – 500ms 之间完成)。这些数据也可以用来计算 P90、P95 等等。

由于我们的监控一般是绘制一条曲线,而不是一个区间。所以 P99 在 300-500 之间是不行的,需要计算出一个数字来。

Prometheus 是假设每一个桶内的数据都是线性分布的,比如说现在 300-500 的桶里面一共有 100 个请求,小于300个桶里面一共有 9850 个请求。所有的桶一共有 1万个请求。

那么我们要找的 P99 其实是第 10000 * 0.99 = 9900 个请求。第 9900 个请求在 300-500 的桶里面是第 9900 – 9850 = 50 个请求。根据桶里面都是线性分布的假设,第 50 个请求在这个桶里面的耗时是 (500 – 300) * (50/100) = 400ms,即 P99 就是 400ms。

可以注意到因为是基于线性分布的假设,不是准确的数据。比如假设 300-500 的桶中耗时最高的请求也只有 310ms,得到的计算结果也会是 400ms。桶的区间越大,越不准确,桶的区间越小,越准确。

写这篇文章,是因为昨天同事跑来问我,“为啥我的日志显示最慢的请求也才 1s 多,但是这个 P999 latency 显示是 3s?”

我查了一下确实如他所说,但是这个结果确实预期的。因为我们设置的桶的分布是:10ms、50ms、100ms、500ms、1s、5s、10s、60s。

如上所说,Prometheus 只能保证 P999 latency 落在了 1s – 5s 之间,但不能保证误差。

如果要计算准确的 Quantile,可以使用 Summary 计算。简单来说,这个算法没有分桶,是直接在机器上计算准确的 P99 的值,然后保存 P99 这个数字。但问题一个是在机器本地计算,而不是在 Prometheus 机器上计算,会占用业务机器的资源;另一个是无法聚合,如果我们有很多实例,知道每一个实例的 P99 是没有什么意义的,我们更想知道所有请求的 P99。显然,原始的信息已经丢失,这个 P99 per instance 是无法支持继续计算的。

另外一个设计巧妙的地方是,300-500 这个桶保存的并不是 300-500 耗时的请求数,而是 <500ms 的请求数。也就是说,后面的桶的请求数总是包含了它前面的所有的桶。这样的好处是,虽然我们保存的数据没有增加(还是10个数字),但是保存的信息增加了。假如说中间丢弃一个桶,依然能够计算出来 P99,在某些情况下非常有用,比如监控资源不够了,我们可以临时不收集前5个桶,依然可以计算 P99。



欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢:

d879676eef632056dc1fc00c3de3cae4.png

已在知识星球更新源码解析如下:

a774fb3e67fe8943fbc1ade6bd0a840d.jpeg

1cb1abe217a41139dbd0b1b2c738d2e9.jpeg

16705dc9f850eab78237eae833c508d1.jpeg

fa2cbf5477dd5e2f79b5249bccae19f7.jpeg

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
实战指南:如何用Python快速计算P90/P95/P99性能指标(附完整代码) 本文提供了一份实战指南,详细讲解如何使用Python快速计算P90、P95、P99等关键性能指标。文章深入探讨了百分位数的业务意义,并提供了从数据清洗、核心计算到完整工具链构建的完整代码,帮助开发者和SRE精准定位系统性能瓶颈与尾部延迟问题。 阅读详情

相关推荐

Prometheus histogram_quantile 函数详解:3个常见误区与P99计算实战

本文深入解析Prometheus的histogram_quantile函数,重点探讨P99计算中的3个常见误区与实战解决方案。通过直方图基础原理、完整P99计算示例和错误修正方案,帮助开发者准确监控请求延迟等关键指标,避免因Counter重置、维度聚合错误和线性插值假设导致的常见问题。

csdndownload11123的博客 391

服务响应时间与分布(p99指标)

分析服务响应时间分布,如:均值、中位值、P95值、P99值等如何计算 平均值 我们考察一个服务器的性能,除了QPS数据外,还会考察响应时间,当服务器负载增高时,往往会伴随着响应时间的增长,但是这个值该如何度量,以精准的表现服务器当前之负载呢? 最常用的值为平均值,表示服务的平均响应时间,通过该值我们能够知道服务当前响应的所有请求耗时的平均值。 例如平均耗时为100ms,表示服务器当前请求的总耗时/请求总数量,通过该值,我们大体能知道服务运行情况。 但是对于具体有多少个请求的耗时比100ms要大,大多少

赶路人儿 2万+

PromQL histogram_quantile 实战:3步计算K8s API Server P99延迟

本文详细介绍了如何使用PromQL的histogram_quantile函数精确计算Kubernetes API Server的P99延迟。通过分析直方图指标、构建基础查询、高级查询技巧与优化,以及Grafana面板配置实战,帮助开发者掌握请求延迟监控的核心方法,提升集群性能分析的准确性。

B1334628598的博客 448

P99 到底是如何计算的?

Latency (延迟)是我们在监控线上的组件运行情况的一个非常重要的指标,它可以告诉我们请求在多少时间内完成。监控 Latency 是一个很微妙的事情,比如,假如一分钟有 1 亿次请求,...

云原生实验室 3803

使用Prometheus计算百分位数值 自定义springboot starter集成Prometheus Histogram 获取P99等百分位监控指标

springboot应用中Prometheus 获取百分位指标,需要实现 DistributionStatisticConfig配置类,详细介绍可以参考 “pringboot如何集成Prometheus如何暴露Histogram来获取P99等监控指标” 一文,地址:https://blog.youkuaiyun.com/lp19861126/article/details/106309546 这里介绍如何通过自定义 starter通过pom 引用的方式达到代码无侵入方式,主要达到两个需求: 1、配置类的过滤参数不能

lilong418的专栏 3938

为什么P99.9比平均值更能反映系统性能?从美团分桶算法看百分位计算优化

本文深入探讨了P99.9等百分位指标在系统性能监控中的核心价值,对比了平均值与P99.9的差异,并详细解析了美团分桶算法的实现原理与优化策略。通过真实案例和最佳实践,展示了如何利用P99.9指标精准定位系统瓶颈,提升用户体验和商业价值。

weixin_29227585的博客 509

性能指标 P99(99th Percentile)​​

​ 是衡量系统性能的关键指标之一,表示 ​,反映的是系统在最差情况下的尾部延迟(Tail Latency)。与之类似的还有 P90、P95、P999 等。

m0_46322965的博客 3030

计算P99和P95:性能监控的关键指标(100万条一分钟请求时间记录为例)

P99和P95是百分位数指标,它们分别表示在所有请求中,有99%和95%的请求响应时间小于或等于某个值。这些指标对于识别和解决性能瓶颈至关重要,因为它们可以帮助我们了解大多数用户的体验以及极端情况下的性能表现。

私聊前往站内信:https://i.youkuaiyun.com/#/msg/chat/weixin_44976692 1万+

基于Dubbo SPI来统计接口的TP90、TP99指标

主要原理还是依赖Dubbo的Filter机制。 import org.apache.dubbo.common.constants.CommonConstants; import org.apache.dubbo.common.extension.Activate; import org.apache.dubbo.rpc.*; import org.springframework.util.CollectionUtils; import java.math.BigDecimal; import java.

徐小陌的博客 688

普罗米修斯?对!就是 Prometheus ,如何计算 P90 / P99 ? 准确评控服务耗时性能!

文章目录普罗米修斯?对!就是 Prometheus ,如何计算 P90 / P99 ? 准确评控服务耗时性能!服务耗时是对系统性能评估的重要因素极短的服务耗时是用户体验良好的基准P90 / P99 / Avg 衡量服务耗时指标Prometheus histogramP90 \ P99 计算P90 \ P99 代码实现Q&A附录 普罗米修斯?对!就是 Prometheus ,如何计算 P90 / P99 ? 准确评控服务耗时性能!   前文 “ 普罗米修斯?古希腊泰坦之神?异形?不,新一代企业级监控组

魏小言的博客 4640

【Prometheus】如何使用 `quantile()` 函数计算分位数(例如 P95, P99)?

Prometheus分位数计算实践指南 本文深入解析Prometheus中quantile()函数的原理与应用,揭示分位数计算在系统监控中的关键作用。主要内容包括: 分位数本质:P95/P99等指标能有效识别长尾延迟,比平均值更能反映极端情况。 函数原理:quantile()采用线性插值法计算跨时间序列的即时分位数,仅支持即时向量输入。 典型场景:适用于多实例聚合分析,如集群中所有节点的P99延迟监控。 生产实践:通过记录规则+子查询实现滑动窗口分位数计算,避免直接对原始指标使用quantile()的陷阱。

九师兄 33

P99 是如何计算的

Latency (延迟)是我们在监控线上的组件运行情况的一个非常重要的指标,它可以告诉我们请求在多少时间内完成。监控 Latency 是一个很微妙的事情,比如,假如一分钟有 1亿次请求,你就有了 1亿个数字。如何从这些数字中反映出用户的真实体验呢? 之前的公司用平均值来反应所有有关延迟的数据,这样的好处是计算量小,实施简单。只需要记录所有请求的一个时间总和,以及请求次数,两个数字,就可以计算出平均耗时。但问题是,平均耗时非常容易掩盖真实的问题。比如现在有 1% 的请求非常慢,但是其余的请求很快,那么这 1

大叶子不小的博客 7201

奥顺居PHP测算引流SEO程序_八字风水_起名解梦_星座生肖综合门户源码

奥顺居PHP测算引流SEO程序_八字风水_起名解梦_星座生肖综合门户源码 S30新框架适合多种奥顺插件。

xl1407的博客 1754

理解TiDB集群的P99计算方式

原文来源: https://tidb.net/blog/c38dd8ac ...

TiDB 社区干货传送门 501

从零搭建企业网络:使用Packet Tracer模拟多区域OSPF组网全过程

本文通过Cisco Packet Tracer模拟,详细演示了从零搭建一个典型企业多区域OSPF网络的完整流程。内容涵盖网络拓扑规划、IP地址设计、多区域划分原理,并提供了从设备初始化、接口配置到OSPF多区域核心配置与验证的详细步骤。文章旨在帮助网络学习者与IT支持人员通过动手实验,将理论知识转化为实际的配置与排障能力。

day7的博客 1032

网络安全 | 企业网络安全的十大挑战及解决方案

网络安全 | 企业网络安全的十大挑战及解决方案,随着信息技术的飞速发展,企业数字化转型进程不断加速,网络安全问题日益成为企业运营与发展面临的关键挑战。本文深入剖析企业网络安全的十大挑战,包括网络攻击日益复杂、数据泄露风险、内部威胁、物联网安全、云安全、合规性要求、移动办公安全、供应链安全、人才短缺以及安全预算有限等,并针对每个挑战详细阐述相应的解决方案,旨在为企业构建全面、有效的网络安全体系提供指导与参考,助力企业在复杂多变的网络环境中保障自身信息资产安全,实现可持续发展。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 4万+

从P99到P50:Apache SkyWalking服务响应时间百分位计算全解析

你是否曾遇到这样的困惑:系统平均响应时间正常,但用户仍抱怨卡顿?这是因为平均值无法反映极端情况,而百分位指标(如P99、P95)能更真实地揭示系统性能瓶颈。本文将深入解析Apache SkyWalking如何通过Observability Analysis Language(OAL)实现响应时间百分位计算,帮助你精准定位服务延迟问题。 ## 百分位计算核心原理 SkyWalking采用滑动窗口...

gitblog_00612的博客 1142

11.11华为OD机试真题 新系统 - 管线同类区段归并 (Java/Py/C/C++/Js/Go)

11.11华为OD机试真题 新系统 - 管线同类区段归并 (Java/Py/C/C++/Js/Go)

算法大师! 122

Apache SkyWalking服务响应时间百分位:P95/P99计算方法

在分布式系统监控中,平均响应时间(Average Response Time)往往无法真实反映系统性能瓶颈。例如,当99%的请求在100ms内完成,但1%的请求耗时超过10秒时,平均响应时间可能仅显示为200ms,掩盖了关键问题。Apache SkyWalking(应用性能监控系统,Application Performance Monitoring System)通过P95、P99等百分位指标,...

gitblog_00952的博客 1301

Xilinx FPGA平台DDR3设计保姆式教程(1)DDR3基础简介

xilinx平台DDR3设计(1)DDR3简介 如果我们只是拿来用ddr搬砖,那么它就简单,知道IP怎么使用就好,但是要想知其所以然,理论知识是必备的,这也是我们初学者所欠缺的东西,慢慢修炼吧! 目录 一、DDR3简介 二、地址的概念及容量计算 三、重要给概念理解 3.2 列地址脉冲选通潜伏期 3.4 掩码 四、参考资料 一、DDR3简介 DDR3全称double-data-rate 3 synchronous dynamic RAM,即第三代双倍速率同步动态随机存储器。...

数字IC/FPGA杂货铺,找一找,或许有你想要的~ 1万+

整车电检工艺流程

本文是笔者在从事汽车行业智能制造领域过程,对于整车电检工艺流程的理解与总结。

qq_40664711的博客 1万+

深入解析百分位(P95/P99)原理、计算与应用场景

在系统性能监控与数据分析领域,理解数据分布是评估服务质量和用户体验的基础。平均值等传统指标容易掩盖极端值的影响,而百分位作为一种描述数据位置和分布的统计概念,能够精准揭示长尾问题。其核心原理在于对有序数据集进行划分,例如第95个百分位(P95)表示95%的数据小于或等于该值,从而聚焦于尾部延迟。从技术价值看,百分位指标是定义服务等级协议(SLA)、进行容量规划和性能优化的关键依据,尤其在微服务架构和云原生环境中,对于保障系统稳定性至关重要。在实际应用场景中,P95常用于衡量Web服务、API接口的响应延迟,

weixin_33853827的博客 398

大模型——AI对话四象限

{ "摘要": "文章揭示了90%的人不会有效与AI沟通的问题,指出简单粗暴的提问只能得到标准答案。作者提出'AI对话四象限'模型:1)双方都懂时提效;2)AI懂但需学会分层提问;3)共同探索未知领域;4)向AI传授独家知识。强调沟通技巧的重要性,认为会提问的人不会被AI替代。最后呼吁读者尝试四象限思维,与AI碰撞火花。" }

312

99线怎么算?99线、90线盯哪根? 面试官:你连这都分不清,出门左拐不送。直接凉凉

99线怎么算?99线、90线盯哪根? 面试官:你连这都分不清,出门左拐不送。直接凉凉

架构师尼恩 1150

【实验必备】对AffectNet数据集进行人脸对齐的小Demo

本文首先简单介绍了AffectNet数据集,及人脸关键点等背景知识,接着Po出了人脸对齐的代码及效果展示。注:本文代码参考自FG2021的Emotion-GCN的开源代码,具有一定的可靠性,欢迎大家学习!

信小海 2673

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

平均值、P50、P75、P95、P99.9百分位数值——服务响应时间的重要衡量指标

前段时间,在对系统进行改版后,经常会有用户投诉说页面响应较慢,我们看了看监控数据,发现从接口响应时间的平均值来看在500ms左右,也算符合要求,不至于像用户说的那么慢,岁很费解,后来观察其它的一些指标发现确实是有问题,这个指标就是P95,P99.9,我们发现虽然平均响应时间并不高,但P95和P99.9却达到了2s以上,说明我们的接口确实存在慢查询。于是捞取了一些慢查询的请求日志终于发现问题。那么P95、P99又代表什么意思呢?

子冉冰清的博客 7577

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

上一篇: K8s + SpringBoot实现零宕机发布
下一篇: 接口突然超时10宗罪。。。
公众号-芋道源码
博客等级 码龄10年 1636粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值