巧用 “火焰图” 快速分析链路性能

本文旨在帮助读者了解什么是全链路追踪以及如何使用工具来分析链路中性能瓶颈。

🔥火焰图是什么

火焰图(Flame Graph)是由 Linux 性能优化大师 Brendan Gregg 发明的用于分析性能瓶颈的可视化图表,它以一个全局的视野来看待时间分布,从顶部往底部列出所有可能导致性能瓶颈 Span。

下面以观测云的火焰图为例,陈述其绘制逻辑:

纵轴(Y轴)代表调用 Span 的层级深度,用于表示程序执行片段之间的调用关系。上面的 Span 是下面 Span 的父 Span。(数据上,可以通过子 Span 的 parent_id 等于父 Span 的 span_id 关联起来)

横轴(X轴)代表单个 Trace 下 Span 的持续时间。一个格子的宽度越大,说明该 Span 从开始到结束的持续时间越长。只要有“平顶”,则表示该函数可能存在性能问题,就可能是造成性能瓶颈的原因。

🔥🔥为什么要用火焰图

通常,我们可以通过查询日志、使用Shell等协助定位问题异常原因;再细致一点,会用到Jmap、Jstack分析堆栈跟踪等。但若需要分析至堆栈、调用链的阶段,说明很可能已经是Performance的问题了。但上述方法,或将产生海量文本无法直观分析,或缺乏汇聚型数据难以综合评判,降低了我们排查问题的效率。

因此,为了降低人工二次分析难度、提高性能数据的易懂性,火焰图便被广泛用于分析性能瓶颈问题。它纳入了线程栈的调用链和出现频率两个维度,从而可以非常方便地看到顶层的哪个函数占据的宽度最大,即性能资源都消耗在了哪里;进而,能够直观地定位程序的性能瓶颈,以进行相应地优化。

观测云的火焰图除了展示函数调用的基本性能信息之外,还在同一个可视化图表中关联了多维度数据,便于用户综合评判性能瓶颈的原因所在;同时,充满细节与温度的人性化交互设计,提升了使用体验及工作效率

🔥🔥🔥如何巧用观测云火焰图分析链路性能

3.火焰图

火焰图左侧图示区:

同一种颜色的 Span 对应同一个服务:可直观感知当前 Trace 所涉及到哪些服务请求。(小提示:服务的颜色会继承到链路查看器等其他分析页面)

每一个Span 块默认显示:当前 Span 的资源或操作、持续时间、以及是否存在错误;悬浮还可展示其整体耗时占比。

对于多线程或者异步任务:同层级或下属子Span执行时间可能会出现重叠,图中通过连线的形式来关联父子 Span 之间的关系。

右侧服务列表:

显示当前 Trace 内发生请求调用,所涉及到的服务名称和颜色、该服务执行时间占总执行时间的百分比。(注意:服务名称显示为 None 的情况,则表示当前 trace 未找到 parent_id = 0 的顶层 Span)

3.2  Span 列表

上图全收起状态,以服务视角

显示服务类型、名称和颜色,以及当前服务下是否存在 status = error 的 Span;还依次显示当前服务下面的 Span 数量、持续时间的平均值、执行时间总和,以及当前服务的执行时间占总执行时间的百分比。

下图服务行展开状态,以 Span 视角

显示资源名称、对应服务颜色及当前 span 是否存在 status = error ;还依次显示当前 Span 持续时间、执行时间数值及占总执行时间的百分比。

3.服务调用关系

观测云还可以显示当前 Trace 下服务之间的调用关系拓扑:

支持按资源名称模糊匹配,定位某个资源的上下游服务调用关系。

服务 hover 后,显示当前服务下的 Span 数量、服务执行时间及占比。

🔥🔥🔥🔥如何开启观测云通过火焰图分析链路性能

4.注册与安装

建议通过电脑端,进入【 观测云 】(https://console.guance.com)平台进行实操,并参考观测云学堂【 巧用“火焰图”快速分析链路性能 】(https://www.guance.com/learning/articles/flame_graph01) 的操作指引。

4.实际链路数据分析举例

第一步登录观测云工作空间,查看应用性能监测模块的服务列表,从服务页面已经可以看出 browser服务的 P90 响应时间较长。

第二步点击 browser服务名称,查看该服务的概览分析视图,可以看出影响当前服务响应时间的最关键的资源是 query_data这个接口,因为这个接口是观测云的一个数据查询接口,所以接下来我们看下这个接口在查询过程当中,到底是因为什么导致耗时较长。

第三步点击资源名称,跳转到查看器,通过点击 持续时间 倒序查看响应时间的最大值。

第四步点击 Span 数据,查看分析当前 Span 在整个链路里面的执行性能和其他相关信息。

第五步点击右上角 [全屏] 模式按钮,放大查看火焰图相关信息。

结合整体链路查看,可以看出 browser服务在整个链路中的执行时间占比高达 96.26%,从 Span 列表也可以得出此结论。

根据火焰图的占比和对应的链路详情信息,我们可以总和得出 browser的这个 query_data Span在整个执行过程中可以看到 resource_ttfb(资源加载请求响应时间)耗时 400 多毫秒, resource_first_byte(资源加载首包时间)耗时 1.46 秒。

再结合查看 province的地理位置定位是 Singapore(新加坡),而我们的站点部署在杭州节点,则可以得出是因为地理位置问题导致数据传输的时间变长从而影响了整个的耗时。


相关阅读

【 The Flame Graph --Brendan Gregg 】(https://queue.acm.org/detail.cfm?id=2927301)

【 如何读懂火焰图?--阮一峰的网络日志 】(https://www.ruanyifeng.com/blog/2017/09/flame-graph.html)

【 关于 Traces 、Span 等链路相关概念的介绍 --OpenTracing 】(https://wu-sheng.gitbooks.io/opentracing-io/content/pages/spec.html)

【 巧用“火焰图”快速分析链路性能 】(https://www.guance.com/learning/articles/flame_graph01)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容