性能剖析

最近更新时间:2024-07-01 15:32:51

我的收藏
性能剖析能力基于 async-profiler 技术实现,以极低的性能开销,生成性能剖析火焰图,帮助用户直观的分析 CPU/内存飚升的原因,快速定位应用性能瓶颈。相比直接使用社区的 async-profiler 方案,应用性能监控提供的性能剖析能力免去了工具的安装、命令执行、剖析结果下载等复杂的操作,大幅提升了排查应用性能问题的效率。
根据反复性能测试的结果,对一个典型的微服务应用执行性能剖析采集,采集过程中的 CPU 开销在5%以下,内存开销在50M 以下,对于TPS和响应耗时基本没有影响。

操作前提

使用腾讯云增强版 Java 探针,探针版本 TencentCloud-OTel Java Agent 1.16-2024030510 及以上。
支持 OpenJDK 和其他基于 HotSpot JVM 开发的 JDK。
支持 Linux(x64, arm64) 和 macOS(x64, arm64) 操作系统。但在 macOS 中,采集内核态数据存在限制,仅能用于本地测试。
不推荐使用 Java 8u352 以下的 JDK,可能存在 内存崩溃 风险。

操作步骤

2. 在左侧菜单栏选择点击应用性能监控 > 应用诊断 > 性能剖析页面。
3. 在页面左侧的实例列表中找到需要进行性能剖析的实例,点击采集
4. 在弹出对话框中,选择数据采集时长和采集类型,点击确认
5. 采集任务提交后,可以在页面右侧的性能剖析记录中查询剖析结果,当采集状态为采集完成时, 点击查看性能剖析,在弹出页面查看性能剖析火焰图。
选项名
说明
数据采集时长
从应用实例收到采集任务开始,采集剖析数据的时间长度。目前支持5秒、10秒、30秒、3分钟、5分钟。
采集类型
采集类型决定了剖析数据代表的性能指标,目前支持 CPU、耗时、内存三种采集类型。
CPU:代表 CPU 执行代码块所花费的时间。
耗时:耗时基于墙钟时间(Wall Clock)进行统计,从进入到退出方法所经过的实际时间。所有等待时间、锁定和线程同步的时间都包括在内,所以墙钟时间不会短于 CPU 时间。
内存:代表内存分配。

性能剖析火焰图使用说明

性能剖析基于抽样获取剖析数据,性能指标通过函数在抽样中出现的频率来体现,并不是绝对值,所以需要重点关注方法(函数)之间的相对占比。在火焰图中,Y 轴代表方法(函数)栈的深度,X 轴代表被抽样的次数。以 CPU 时间为例,一个方法(函数)的宽度越宽,CPU 执行代码块所花费的时间就越长。
在分析火焰图的时候,建议从深度最深的方法(函数)开始分析。栈最深,出现在火焰图中的位置会越靠近下方,也就是“火苗”的位置(不同于自然界的火焰,在 APM 目前使用的火焰图中,火焰朝向下方)。
注意:
火苗越宽,代表性能上的消耗越大,所以宽火苗往往是引发性能问题的根源。