跳到主要内容

性能分析

2024年04月28日
柏拉文
越努力,越幸运

一、认识


在做性能监控时, 有三个非常关键的环节:收集性能指标数据对性能指标数据做分析根据分析结果做优化。有了这三个环节,性能监控才能算是有了一条相对完整的链路。

当我们打开 Sentry 监控平台,切换到 Performance 面板,然后选择某一个项目时,可以看到以下界面:

Preview

简单操作一下这个界面:

Preview

在操作过程中,我们可以看到:

  • 诸如 View TrendsDisplay: Frontend(Pageload)Display: Frontend(Other)Display: Backend 这样的操作选项

  • 诸如 p50 / p75 / p95ApdexFailure RateTPMThroughput 这样的指标

  • 各种折线图、柱形图、表格

二、Display: Frontend(Pageload)


进入 Performance 面板以后,Dispaly 展示下拉选择框默认会选择 Frontend(Pageload)Sentry 在上报性能指标数据时,会把数据分为首屏 - pageload 和页面切换 - navigation 两类。对应的,我们可以在监控平台中通过选择 Display: Frontend(Pageload)Display: Frontend(Other) 来查看上报的两类数据。

选择 Display: Frontend(Pageload), 我们可以查看首屏(pageload)类型的指标数据。整个 Performance 面板会呈现三块内容:

  1. 卡片区域: FCPLCPFIDCLS 四大指标在过去 24h 内的情况

  2. 折线图 / 柱形图区域: 用于统计 LCP 指标数据、性能监控吞吐量

  3. 表格区域: 统计不同路由在首屏时的 FCPLCPFIDCSLTPM 指标数据

其中,最核心的要数卡片区域

2.1 卡片区域

Preview

卡片区域有 4 个卡片,展示了过去 24hFCPLCPFIDCLS 四个指标的平均耗时,以及表现优劣的百分比。

关于如何评判 FCPLCPFIDCLS 表现的优劣,Sentry 提供了标准:

Preview

FID 为例,图中 FID 的平均耗时为 190ms,好 - good(绿色)占比 72%,意味着过去 24h72% 的首屏 FID 耗时小于 100ms;待提升(黄色) - meh 占比 7%,意味着过去 24h7% 的首屏 FID 耗时在 100ms300ms 之间,需要优化;差 - poor(红色) 占比 22%,意味着过去 2422% 的首屏 FID 耗时大于 300ms,非常糟糕。

通过查看 4 个卡片,我们发现 FCPFID 这两个指标 mehpoor 的比例较高,需要特别去关注。

点击 FID 卡片,会进入对应的指标详情页面。

Preview

指标详情页面,分为折线图表格两个区域。

先看折线图区域。折线图表示过去 24hFID 的耗时情况。折线图中有黄、红两条水平虚线,分别代表 mehpoor。有了这个折线图,哪个时间段 FID 耗时较久以及具体耗时情况就可以一目了然。

表格区域,是不同路由在首屏时 FID 数据的汇总。

表格的表头中有几项需要重点关注 - P50(FID)P75(FID)P95(FID)STATUS

  • STATUS: 代表各个路由在首屏时 FID 的表现情况,有 poormehgood 三个值。点击表头,可以进行升序 / 降序排序。

  • P50P75P95: 是百分位数值,表示从过去 24h 的所有 FID 数据中,挑选出50%(75%、95%) 位置的数据。(挑选之前,要先对数据从小到大排序)。

百分比数值是统计学中的一种术语。通俗来讲,就是将一组数据从小到大排序,并计算相应的累计百分位,则某一百分位所对应数据的值就称为这一百分位的百分位数。例如,将一组 100 个数值按从小到大排列,P50index50 的数值,P75index75 的数值, P95index95 的数值。

为什么这里要使用百分比数值统计呢

要回答这个问题,我们需要先看看统计数据的另一种方法 - 平均值

平均值统计方法,是我们最常用的统计方法,计算简单方便。不过,这种统计方式存在一个非常大的问题,就是它会把一些异常数据平均掉,进而会掩盖一些异常问题。例如平均 FID340ms,但是具体有多少个请求比 340ms 要大,又有多少个请求比 340ms 要小,大多少,是 200 ms,还是 500ms,又或是 1000ms,我们无从得知。

要想解决这个问题,就需要借助百分比数值方法了。例如,FID 平均时间为 150msP5029.61msP75169msP95600ms。这表示我们的首屏 FID 耗时,百分之 5030 ms 以内,百分之 5030ms 以外;百分之 75170ms 以内,百分之 25170ms 以外;百分之 95600 ms 以内,百分之 5600 ms 以外。

这样有了更加精准的统计信息,我们就可以更好的去针对异常数据去做分析。

在表格中选中 /aicc/task/manual 这条数据,然后点击,会进入指定路由对应的详情页面。

Preview

在这一页面中,我们重点关注中间的表格区域。

表格区域是指定路由在首屏期间的数据上报记录汇总,并且上报的性能指标汇总包含 FID。表格有四个过滤条件: Recent TransactionsSlow Transactions(P95)Outlier Transactions(P100)Fastest Transactions,分别对应最近 24h 内的上报记录(按时间排序)、最近 24h 内上报记录的前 95% (按首屏时间从大到小排列)、最近 24h 内上报记录的前 100%(按首屏时间从大到小排列)、最近 24h 内耗时最短的记录(按首屏时间从小到大排列)。

指定过滤条件为 Recent Transactions, 然后任选一条记录点击,计入上报记录详情页面。

Preview

在详情页面中,我们可以看到路由为 /aicc/task/manual 的首屏加载详情。通过分析首屏加载的各个过程,就可以知道为什么 FID 耗时较长了,然后做针对性的性能优化。

2.2 折线图、柱形图区域

折线图、柱形图区域,用来展示过去 24hLCP 和性能监控上报数据吞吐量的情况。

Preview

2.3 表格区域

表格区域,是不同路由在首屏时 FCPLCPFIDCLS 数据的汇总。

Preview

我们可以选中任一条数据,进入到指定路由的详情页面。

Preview

然后选中任一条上报数据记录,进入到上报数据详情页面。

Preview

在详情页面,我们可以通过分析首屏加载的各个过程,看到底是哪个阶段出现异常导致首屏耗时较久,然后做针对性的性能优化。

三、Display: Frontend(Other)


进入 Performance 面板以后,Dispaly 展示下拉选择框默认会选择 Frontend(Pageload)Sentry 在上报性能指标数据时,会把数据分为首屏 - pageload 和页面切换 - navigation 两类。对应的,我们可以在监控平台中通过选择 Display: Frontend(Pageload)Display: Frontend(Other) 来查看上报的两类数据。

选择 Display: Frontend(Other), 我们可以查看首屏(navigation)类型的指标数据。

Preview

此时, Performance 面板分为两个区域:

  1. 折线图、柱形图区域

  2. 表格区域

3.1 折线图、柱形图区域

折线图、柱形图区域,用来展示过去 24h 内各个时间段页面切换耗时的 P50(P75、P95)值以及各个耗时对应的上报记录数。

Preview

3.2 表格区域

表格区域,统计不同路由页面切换耗时的 P50(P75、P95)值以及吞吐量情况。

Preview

我们可以选中任一条数据,进入到指定路由的详情页面。

Preview

然后选中任一条上报数据记录,进入到上报数据详情页面。

Preview

在详情页面,我们可以通过分析页面切换过程中各个接口的调用情况,找到有异常的接口调用,然后针对性的做性能优化。

四、Display: Backend


选择 Display: Backend, 我们可以查看性能监控数据上报的汇总统计。

Preview

此时, Performance 面板分为 3 个区域:

  1. 卡片区域

  2. 折线图、柱形图区域

  3. 表格区域

4.1 卡片区域

卡片区域,用来统计和性能数据上报相关的 ThroughputFailure RateApdex 和页面加载耗时的 P75 值。

Preview

Apdex,application performance index,应用性能指标,用于根据应用程序响应时间跟踪和衡量用户满意度。分数越高,代表用户满意度越高,最高可到 1.0,即 100% 的用户有满意的的体验。该指标提供了一个标准来判断应用性能。

Apdex 的计算方式:

  • T, 规定一个响应时间的阈值;

  • Satisfactory, 当响应时间 <= T 时, 表示用户满意;

  • TolerableT < 响应时间 <= 4T, 表示用户可以接受;

  • FrustratedT > 4T, 表示用户无法忍受;

  • 计算过程: (满意数量 + 接受数量 / 2) / 所有的数量;(这个公式很好理解,Tolerable,有些用户可以接受,就有些用户不可以接受,所以要除以 2)。

阈值 T 可以在 project -> performance -> response time threshold 中设置:

failure_rate, 不成功事务的失败率。Sentry 将状态不是 okcancelledunknown 的事务视为失败。

Throughput, 吞吐量:

  • Total, 总的吞吐量,即过去 24h 内总的数据上报记录数;

  • TPM, 每分钟的平均事务数,即每分钟数据上报记录数;

  • TPS, 每秒钟的平均事务数,即每秒钟数据上报记录数;

4.2 折线图、柱形图区域

折线图、柱形图区域,用来展示过去 24h 内各个时间段页面切换耗时的 P50(P75、P95)值、各个耗时对应的上报记录数、TPSFailure Rate

Preview

4.3 表格区域

表格区域,统计不同路由页面切换耗时的 P50(P95)值、ApdexFailure RateTPM

Preview

我们可以选择任一条数据,查看指定路由页面切换的详情。


在性能主页中,我们可以通点击右上角的 View Trends 按钮来找到趋势视图。 通过趋势视图,我们可以找到随着时间的推移,性能发生重大变化的情况。

Preview

整个页面分为两个部分。左侧表示性能出现提升,右侧表示性能出现下降。通过这两个折线图,我们就可以知道我们的性能优化是否有起到作用。