性能瓶颈定位更快更准:ARMS 持续剖析能力升级解析

简介: 本文介绍了阿里云ARMS持续剖析技术,助力企业快速定位云原生应用的性能瓶颈。通过代码热点、CPU热点和内存热点分析,结合AI Copilot与差分火焰图功能,实现高效问题诊断与优化验证,全面提升系统性能与稳定性。

持续剖析介绍


随着软件技术发展迭代,很多企业软件系统也逐步从单体应用向云原生微服务架构演进,一方面让应用实现高并发、易扩展、高开发敏捷度等效果,但此外也让软件应用链路变得越来越长,依赖的各种外部技术越来越多,一些线上问题排查起来变得困难重重。

尽管经过过去十几年的发展,分布式系统与之对应的可观测技术快速演进,在一定程度上解决了很多问题,但有一些问题定位起来仍然很吃力,如下图是几个非常有代表性的线上常见问题:

图1 CPU持续性出现波峰

图2 堆内存空间用在了哪里

图3 Trace调用链无法定位到耗时根因

持续性能剖析技术是一种通过采集应用相关线程在申请相关资源时的方法栈状态信息,再通过火焰图等可视化技术绘制出对应资源使用分布情况,最后,确定相关时段特定资源波动根因的一种强有力技术。


开箱即用的持续剖析能力

阿里云应用可观测产品 -  应用实时监控服务 ARMS 早在 2022 年就上线了持续剖析产品能力,帮助用户定位常见的性能方面疑难问题:

具体而言,其主要包含以下 3 块核心功能:

代码热点【1】:其通过墙钟热点关联 Trace 信息,可帮助用户定位:

  • 当业务太复杂,偶发性慢调用无法复现时,代码热点可为您还原代码真实方法层面的执行轨迹。
  • 当调用链中因为缺失对应用代码非框架层面的方法埋点时,代码热点帮您还原对应缺失埋点的实际方法调用耗时。

CPU 热点【2】:通过定时采集正在执行 CPU 线程的方法栈快照,帮助用户定位:

  • 当系统 CPU 使用率较高时,帮助您快速定位导致 CPU 消耗高的相关业务逻辑方法栈。

内存热点【3】:通过记录线程每次触发堆内存分配阈值时的内存分配大小/次数,及对应方法栈快照,帮助用户定位:

  • 当系统 JVM 堆内存利用率高时,帮助您快速定位导致堆内存申请量/申请次数高的相关业务逻辑方法栈。

经过过去几年的大量客户使用和持续演进优化,近期,我们在产品功能易用性上进行了一系列升级,本文接下来对其中重要升级进行一一介绍。

优化存储计算引擎:让数据检索如丝般流畅高效

火焰图数据结构复杂,无论是大数据量的存储还是聚合计算都存在不小的挑战,因此,业界一些产品的常见做法是仅支持临时开启功能采集一段时间数据以及较短时间间隔的数据聚合分析,虽然使用过程略显繁琐,但在一定程度上可以实现辅助排查一般性能瓶颈问题,当遇到一些不易复现的场景问题时,问题定位成本就会非常的高!

本次产品升级后,我们在数据格式和查询引擎方面都做了大量优化,持续剖析查询时间间隔和对象从之前的仅支持 1/5/15 分钟数据聚合效果到现在的天级别、多实例、多线程等维度的秒级聚合,让用户聚合范围不仅广还更细,更好地定位各种性能问题

AI Copilot 驱动火焰图分析:一键洞察性能热点

过去我们从用户侧了解的情况来看,虽然火焰图工具对于排查性能问题非常有效,但是火焰图的阅读对大量客户都存在较大阻碍。因此,我们最新版持续剖析支持基于 AI Copilot 分析火焰图,让不懂火焰图阅读的用户,也能低成本地洞察火焰图中的性能瓶颈。

效果演示

1. 应用开启持续剖析后,在控制台选择对应应用,以 CPU 热点问题举例,在下图所示的火焰图页面中,点击火焰图右上角的 AI Copilot 分析紫色魔法棒触发进行分析:

2. 针对上述火焰图,Copilot 快速给出了分析报告和建议:

3. 从报告结果中可见,java.util.LinkedList.node(int) 方法在火焰图中拥有较长的耗时,CPU 占比较大:

4. 除了分析和建议,用户还可以提供部分隐匿关键信息的代码片段,让模型结合上下文,给出有针对性的代码优化建议。

5. 在应用完成代码调整优化后,还可以基于持续剖析能力生成的火焰图回归验证优化结果。

差分火焰图:精准对比性能差异

差分火焰图通过对比两段时间内的性能数据,生成差分火焰图(红色表示性能下降,蓝色表示性能提升),找出不同时段性能显著变化的函数。其对应用性能在一段时间前后有差异变化的场景定位非常有帮助。在新版持续性能剖析中,提供了开箱即用的差分火焰图分析能力。

效果演示

1. 应用开启持续剖析后,在控制台选择对应应用,例如CPU热点问题定位为例,点击页面左上角的“数据对比”按钮生成前后两段时间的查分火焰图:

2. 根据生成的差分火焰图,可以基于使用 AI Copilot 分析火焰图查看不同时段的差分热点:



来源  |  阿里云可观测公众号

相关实践学习
通过轻量消息队列(原MNS)主题HTTP订阅+ARMS实现自定义数据多渠道告警
本场景将自定义告警信息同时分发至多个通知渠道的需求,例如短信、电子邮件及钉钉群组等。通过采用轻量消息队列(原 MNS)的主题模型的HTTP订阅方式,并结合应用实时监控服务提供的自定义集成能力,使得您能够以简便的配置方式实现上述多渠道同步通知的功能。
相关文章
|
Prometheus 监控 前端开发
|
移动开发 监控 Android开发
Android & iOS 使用 ARMS 用户体验监控(RUM)的最佳实践
本文主要介绍了 ARMS 用户体验监控的基本功能特性,并介绍了在几种常见场景下的最佳实践。
1079 97
|
运维 监控 数据可视化
ARMS的微服务监控
【8月更文挑战第23天】
274 6
|
监控 Java 索引
APM Server监控
APM Server监控
|
5月前
|
监控 Kubernetes Java
使用 New Relic APM 和 Kubernetes Metrics 监控 EKS 上的 Java 微服务
在阿里云AKS上运行Java微服务常遇性能瓶颈与OOMKilled等问题。本文教你通过New Relic实现集群与JVM双层监控,集成Helm部署、JVM代理注入、GC调优及告警仪表盘,打通从节点资源到应用内存的全链路观测,提升排障效率,保障服务稳定。
284 2
|
Kubernetes 监控 安全
Kustomize 生产实战 - 注入监控 APM Agent
Kustomize 生产实战 - 注入监控 APM Agent
|
监控 开发工具 Android开发
ARMS 用户体验监控正式发布原生鸿蒙应用 SDK
阿里云 ARMS 用户体验监控(RUM)推出了针对原生鸿蒙应用的 SDK。SDK 使用 ArkTS 语言开发,支持页面采集、资源加载采集、异常采集及自定义采集等功能,能够全面监控鸿蒙应用的表现。集成简单,只需几步即可将 SDK 接入项目中,为鸿蒙应用的开发者提供了强有力的支持。
721 105
|
监控 前端开发 JavaScript
ARMS的Web应用监控
【8月更文挑战第23天】
254 8
|
监控 JavaScript 前端开发
ARMS的移动应用监控
【8月更文挑战第23天】
330 6
|
消息中间件 监控 Java
消息队列和应用工具产品体系-ARMS 监控种类简介(2)
消息队列和应用工具产品体系-ARMS 监控种类简介(2)
消息队列和应用工具产品体系-ARMS 监控种类简介(2)