持续剖析可以有效发现Golang程序中因为CPU、内存和IO导致的瓶颈问题,并且按照方法名称、类名称和行号进行细分统计,最终协助开发者优化程序、降低延迟、增加吞吐量、节约成本。本文介绍如何开启ARMS Golang应用的持续剖析功能以及如何查看持续剖析数据。
前提条件
请先接入ARMS应用监控,并且将Golang Agent版本更新至1.3.0或以上版本,您可以在 页面查看探针版本号。
开启持续剖析功能
登录ARMS控制台,在左侧导航栏选择 。
在应用列表页面顶部选择目标地域,然后单击目标应用名称。
说明语言列的图标含义如下:
:接入应用监控的Java应用。
:接入应用监控的Golang应用。
:接入应用监控的Python应用。
-:接入可观测链路 OpenTelemetry 版的应用。
在上方导航栏选择
。在持续剖析区域,根据需要打开总开关、CPU热点或内存热点开关。
单击保存,等待2分钟左右生效。
查看持续剖析数据
登录ARMS控制台,在左侧导航栏选择 。
在应用列表页面顶部选择目标地域,然后单击目标应用名称。
说明语言列的图标含义如下:
:接入应用监控的Java应用。
:接入应用监控的Golang应用。
:接入应用监控的Python应用。
-:接入可观测链路 OpenTelemetry 版的应用。
在上方导航栏选择
。在左侧实例列表中选择目标实例,然后在右侧页面设置数据展示时间。
在右侧查询页签,您可以执行以下操作筛选数据并查看聚合分析。
在时间窗口大小区域(图示①)选择快照时间大小,然后在曲线图上通过鼠标拖拽选择快照时间范围。
在图示②的下拉框可以选择数据类型:CPU情况和Go Heap。
在图示③区域显示了快照时间范围内的数据列表,单击右上角的聚合分析可以查看快照详情。
性能分析
CPU Time:CPU申请量热点剖析数据。
Allocated Memory:内存申请量热点剖析数据。
Allocations:内存申请次数热点剖析数据,可以查看哪些方法申请内存次数频繁。
说明Self列表示方法在自身的调用栈中所消耗的时间或资源,不包括其子方法调用所消耗的时间或资源。可以用于识别哪些方法在自身内部花费了大量的时间或资源。
Total列包含方法自身消耗的时间或资源,及其所有子方法调用所消耗的时间或资源。可以帮助了解整个方法调用栈中哪些方法贡献了最多的时间或资源。
如需排查具体的热点代码逻辑,可以通过重点关注Self列或直接查看右侧火焰图中底部的较宽火苗从中定位到高耗时的业务方法,较宽火苗是引发上层耗时高的根源,一般是系统性能的瓶颈所在,您可以重点关注。
快照列表
相关文档
您可以使用持续剖析功能排查CPU和内存使用率较高的问题,具体操作如下: