借助Java字节码注入技术,许多基于Java的框架可以实现自动埋点,从而帮助您了解慢请求具体发生在哪两个埋点之间。但这并不足以定位代码层的问题。如需精确定位导致慢请求出现的代码方法,您可以搭配使用SkyWalking的慢请求分析功能和链路追踪。
前提条件
您已通过SkyWalking接入可观测链路 OpenTelemetry 版,详情请参见通过SkyWalking上报Java应用数据。
背景信息
SkyWalking采集慢请求数据的工作流程如图所示。
仅SkyWalking 7.0及更高版本具备慢请求分析功能。
创建慢请求采集任务
登录ARMS控制台,在左侧导航栏选择。
在应用列表页面顶部选择目标地域,然后单击目标应用名称。
说明语言列显示
图标的应用为接入应用监控的应用,显示-图标的应用为接入可观测链路 OpenTelemetry 版的应用。在左侧导航栏单击慢请求分析,并单击新建任务。
在新建任务对话框中输入以下信息,并单击确认。
参数
描述
是否必填
示例值
Span名称
需监控的Span。
是
/api
监控持续时间
监控持续的时间。
否
5 min
Span耗时阈值
仅分析耗时超过该阈值的Span。单位为ms。
否
30 ms
监控间隔
采集监控数据的时间间隔。
否
20 ms
最大采样数
被采集数据的Span最大数量。取值范围为1~9。
否
5
创建任务完成后,可在任务列表中查看创建成功的任务。
定位导致慢请求出现的方法
以您新建任务的时间为起点,经过指定的监控持续时间后,耗时超过阈值的Span将显示在Sampled Traces区域。请按照以下步骤在页面右侧的线程栈详细信息定位导致慢请求出现的方法。
在慢请求分析页面的任务列表区域单击目标任务。
单击目标任务后,右侧展示 Span 树和线程栈分析结果。Span 树以树形表格展示请求调用链路(如根 Span /api 下包含 /api1、/api2 子 Span),并显示各 Span 的开始时间、IP和时长。下方线程栈表格展示完整方法调用栈,包含耗时、函数本身耗时和采集次数列,其中耗时较高的方法(如
java.lang.Thread.sleep)以红色高亮标识,帮助定位导致慢请求的瓶颈方法。耗时超过阈值的Span将显示在Sampled Traces区域。
在Sampled Traces区域单击目标Span,并观察页面右侧的线程栈区域。
以红色字体显示的方法名即为耗时超过所设置阈值的方法。您可以针对性地优化这些方法。
为什么监控持续时间结束后未采样到任何线程栈?
如果监控持续时间结束后未采样到任何线程栈,请按照以下步骤排查。
在慢请求分析页面的任务列表区域单击目标任务右侧的查看任务详情。
在任务详情对话框中查看详细信息。
详细信息包括Span名称(例如
/api)、时间戳、监控持续时间(例如5min)、Span耗时阈值(例如30ms)、监控间隔(例如20ms)和最大采样数(例如5)等参数,以及实例(含Agent IP)、操作类型等字段。