通过错/慢调用链排查应用产生异常的原因

在生产环境中,引发应用异常(如耗时突增、错误率突增)的原因有很多,常见的包括流量不均、单机故障、程序异常和依赖组件故障等。在新应用上线或大促备战前通常建议做一次系统性的性能调优,分析当前系统存在哪些性能瓶颈,梳理出常出错的或耗时较高的接口和组件进行优化。本文介绍如何使用ARMS调用链分析的错/慢Trace分析功能,定位系统或应用产生错、慢调用的原因,帮助您排查问题、定位系统性能瓶颈。

前提条件

体验Demo

ARMS控制台Demo

通过错Trace分析功能排查错调用根因

步骤一:定位错调用发生时间

  1. 登录ARMS控制台,在左侧导航栏选择应用监控 > 应用列表

  2. 应用列表页面顶部选择目标地域,然后单击目标应用名称。

    说明

    语言列的图标含义如下:

    Java图标:接入应用监控的Java应用。

    image:接入应用监控的Golang应用。

    -:接入可观测链路 OpenTelemetry 版的应用。

  3. 在上方导航栏单击调用链分析

    说明

    仅新版控制台支持进入调用链分析页面,切换新版控制台的操作请参见前提条件

    可以发现示例应用mall-gateway15:20~15:28时间段出现了一些HTTP错误的调用。

    image

  4. 修改查询时间段为HTTP错误发生的时间,开始排查问题。

    image

步骤二:定位错误调用所在的接口或组件

错/慢Trace分析页签,可以发现错Trace主要集中在/components/api/v1/mall/product接口上,且全都是500错误。

image

排查/components/api/v1/mall/product接口

  1. 在下方图表中单击spanName: /components/api/v1/mall/product

    image

    此时调用链分析会自动将serviceName="mall-gateway" AND spanName="/components/api/v1/mall/product"设置为筛选条件。

    可以发现/components/api/v1/mall/product接口的调用链全都出错了。

    image

  2. 列表页签,单击任意Trace右侧的详情,可以查看错误详情。

    image

通过慢Trace分析功能梳理慢接口

步骤一:定位慢调用发生时间

  1. 登录ARMS控制台,在左侧导航栏选择应用监控 > 应用列表

  2. 应用列表页面顶部选择目标地域,然后单击目标应用名称。

    说明

    语言列的图标含义如下:

    Java图标:接入应用监控的Java应用。

    image:接入应用监控的Golang应用。

    -:接入可观测链路 OpenTelemetry 版的应用。

  3. 在上方导航栏单击调用链分析

    可以发现示例应用mall-user-server15:40~15:49时间段存在许多5s以上的慢调用。

    image

  4. 修改查询时间段为慢调用发生的时间。

    image

  5. 错/慢Trace分析页签修改耗时对比临界值5000ms,开始排查问题。

    image

步骤二:定位慢调用所在的接口或组件

错/慢Trace分析页签,可以发现慢Trace主要集中在接口名为/components/api/v1/http/success、上报协议为EagleEye,以及命名空间为arms-testSpan上,依次对它们进行排查。

image

排查/components/api/v1/http/success接口

在下方图表中单击spanName: /components/api/v1/http/success

image

此时调用链分析会自动将serviceName="mall-user-server" AND spanName="/components/api/v1/http/success"设置为筛选条件。

可以发现,在该筛选条件下,每一次调用耗时都大于5s,/components/api/v1/http/success接口即为慢调用根因。

image

耗时百分位区域同样可以发现调用平均耗时大于5s。

image

排查attributes._arms.trace.protocol.type=EagleEyeSpan

在下方图表中单击attributes._arms.trace.protocol.type: EagleEye

image

此时调用链分析会自动将serviceName="mall-user-server" AND attributes._arms.trace.protocol.type="EagleEye"设置为筛选条件。

可以发现,在该筛选条件下,慢Trace的也指向了/components/api/v1/http/success接口。

image

/components/api/v1/http/success接口加入筛选条件中,可以发现每一次调用的耗时都大于5秒。

image

耗时百分位区域同样可以发现调用平均耗时大于5s。

排查命名空间为arms-testSpan

serviceName="mall-user-server" AND attributes.namespace="arms-test"筛选条件下,可以发现,慢Trace的依然指向/components/api/v1/http/success接口。

image

/components/api/v1/http/success接口加入筛选条件中,可以发现每一次调用的耗时都大于5秒。

image

经过上述的排查,可以发现慢调用都来自于接口/components/api/v1/http/success attributes._arms.trace.protocol.type="EagleEye"arms-test命名空间自身都没有问题,它们中出现了慢调用是因为/components/api/v1/http/success接口服务部署在arms-test命名空间,且它的调用链上报协议类型为EagleEye。