持续剖析可以有效发现Python程序中因为CPU、内存等因素导致的瓶颈问题,并且按照方法名称、类名称和行号进行细分统计,最终协助开发者优化程序、降低延迟、增加吞吐量、节约成本。本文介绍如何开启ARMS Python应用的持续剖析功能以及如何查看持续剖析数据。
前提条件
-
请先完成应用接入,并且将Python Agent版本更新至2.3.0或以上版本,您可以在应用设置 > 探针管理页面查看探针版本号,并参考指定版本。
-
如果应用所部署环境的VPC网络配置了可访问阿里云对象存储OSS的Bucket限制策略,由于该功能会将应用实例所采集数据上传到ARMS统一的OSS Bucket中进行存储与处理,如果配置相关策略但未将ARMS统一的OSS Bucket配置在其中会导致数据无法被有效采集。需要将持续剖析功能相关的Bucket(arms-profiling-<regionId>)配置在您的策略规则中。请将<regionId>换成对应的地域ID,例如您应用部署在cn-hangzhou地域,Bucket则对应为arms-profiling-cn-hangzhou。
支持的 Python 版本
开启持续剖析功能
-
登录ARMS控制台,在左侧导航栏选择应用监控 > 应用列表。
-
在应用列表页面顶部选择目标地域,然后单击目标应用名称。
在应用列表页面顶部选择目标地域,然后单击目标应用名称。
说明语言列的图标含义如下:
:接入应用监控的Java应用。
:接入应用监控的Golang应用。
:接入应用监控的Python应用。-:接入可观测链路 OpenTelemetry 版的应用。
-
在上方导航栏选择应用配置 > 自定义配置。
-
在持续性能剖析区域打开总开关,并根据需要打开其他功能开关。
持续性能剖析区域包含以下配置项:总开关(打开后将低开销地对应用进行持续诊断)、CPU热点(开启后将采集应用运行过程中CPU火焰图信息)、采样频率(单位ms,默认值为10)、内存热点(开启后将采集应用运行过程中堆内存火焰图信息)、采样阈值(单位KB,默认值为1024)。
-
单击保存,等待2分钟左右生效。
查看持续性能剖析数据
-
登录ARMS控制台,在左侧导航栏选择。
-
在应用监控的页面进入目标应用,然后在上方导航栏选择。
数据查询
数据查询页面顶部为应用名和Profile类型的筛选元数据区(①),右上角为时间范围选择区(②),左侧为快捷筛选区(③),页面中部为趋势图(④),下部为火焰图(⑤)。各区域功能说明如下:
-
筛选元数据(图示①)
Profile元数据包含应用名和Profile类型两个部分,可以通过这两个部分确定一组Profile。
选择一组元数据后,系统将根据您所选择的元数据自动更新趋势图和火焰图。
说明更换选择的元数据,系统将清除快捷筛选区域内已有的标签筛选条件。
选择应用名后展开列表,可见 profile_cpu.cpu(CPU使用情况)、profile_mem.alloc_in_new_tlab_bytes(堆内存分配的字节数)、profile_wall_clock.wall_clock(代码整体执行时间)等 Profile 类型选项。
-
设置元数据的时间范围(图示②)
该时间范围用于指定元数据和快捷筛选数据的获取范围。为保证响应速度,默认为最近15分钟。通常情况下无需更改。在数据变动较频繁或间隔较大时,可以进行对应调整。
该时间仅影响趋势图和火焰图的时间范围,不会影响元数据的时间范围,支持自动刷新。
-
快捷筛选(图示③)
快捷标签数据依赖于元数据的时间范围,标签键来源于性能监控数据中的
labels字段(JSON格式)。不同标签之间为“与”的逻辑关系。选择标签后,系统将根据您所选择的标签自动更新趋势图和火焰图。-
主机地址:开始性能剖析的实例IP。
-
线程名称:应用的全部线程,可以根据CPU耗时、内存占用等指标发现异常线程。
-
线程组名称:展示线程组,是一组规则相同的线程合集,可以根据CPU耗时、内存占用等发现一类异常线程。
-
-
趋势图(图示④)
对应Profile元数据在指定时间范围内的趋势。
-
火焰图(图示⑤)。
选择元数据、标签、时间后,系统将自动生成一组Profile的火焰图。
-
单击
图标,可以查看Copilot对当前火焰图分析出的问题和处理建议。您也可以自定义问题,进一步了解CPU、内存、火焰图相关数据。 -
选择显示模式,可以设置仅火焰图、仅表格或表格+火焰图。
-
单击查看SQL,可以查看构建该火焰图的SQL语句,您可以根据SQL语句前往阿里云日志服务SLS的对应Project和Logstore进行数据分析。
-
数据对比
通过数据对比可以查看目标Profile在当前一段时间和过去一段时间内的数值对比。
数据对比页面顶部为筛选元数据区(①),右上角为时间范围选择区(②,含当前值和过去值),左侧为快捷筛选区(③),页面中部为左右并列的趋势图(④),下部为左右并列的火焰图(⑤)。各区域功能说明如下:
-
筛选元数据(图示①)
Profile元数据包含应用名和Profile类型两个部分,可以通过这两个部分确定一组Profile。
选择一组元数据后,系统将根据您所选择的元数据自动更新趋势图和火焰图。
说明更换元数据的选择,系统将清除快捷筛选区域内已有的标签筛选条件。
在数据对比Tab下选择应用名展开列表,可勾选 profile_cpu.cpu(CPU使用情况)、profile_mem.alloc_in_new_tlab_bytes(堆内存分配的字节数)等 Profile 类型选项。
-
设置元数据的时间范围(图示②)
该时间范围用于指定元数据和快捷筛选数据的获取范围。为保证响应速度,默认为最近15分钟。通常情况下无需更改。在数据变动较频繁或间隔较大时,可以进行对应调整。
该时间仅影响趋势图和火焰图的时间范围,不会影响元数据的时间范围,支持自动刷新。
-
快捷筛选(图示③)
快捷标签数据依赖于元数据的时间范围,标签键来源于性能监控数据中的
labels字段(JSON格式)。不同标签之间为“与”的逻辑关系。选择标签后,系统将根据您所选择的标签自动更新趋势图和火焰图。-
主机地址:开始性能剖析的实例IP。
-
线程名称:应用的全部线程,可以根据CPU耗时、内存占用等指标发现异常线程。
-
线程组名称:展示线程组,是一组规则相同的线程合集,可以根据CPU耗时、内存占用等发现一类异常线程。
-
-
趋势图(图示④)
趋势图用于展示当前一段时间和过去一段时间内数据波动情况和总体趋势。趋势图是基于元数据和标签的筛选结果,以时间进行聚合,其聚合策略来源于元数据区域。
在当前值区域,时间范围固定与主时间范围(图示②)相同,您可以在过去值区域,单击过去N小时指定要对比的时间段。
-
火焰图(图示⑤)。
选择元数据、标签、时间后,系统将自动生成Profile的火焰图。单击
图标,可以切换查看简单对比视图和融合对比视图。简单对比视图
简单对比视图将当前值和过去值的趋势图和火焰图左右并列展示,便于直观比较两个时间段的性能数据差异。
融合对比视图
红色代表相对过去占比增加,蓝色代表相对过去占比减少。
融合对比视图将两个时间段的数据合并到同一张火焰图中显示,通过颜色直观标识各调用栈的占比变化。
-
单击
图标,可以查看Copilot对当前火焰图分析出的问题和处理建议。您也可以自定义问题,进一步了解CPU、内存、火焰图相关数据。在融合对比视图中,Copilot会对两段时间内的性能剖析数据进行对比分析,给出对比火焰图的前后性能变化,影响性能的因素等。单击火焰图详情分析,Copilot可以进一步分析具体的性能问题,并给出修复建议。
-
选择显示模式,可以设置仅火焰图、仅表格或表格+火焰图。
-
单击查看SQL,可以查看构建该火焰图的SQL语句,您可以根据SQL语句前往阿里云日志服务SLS的对应Project和Logstore进行数据分析。
-