skywalking定位慢接口调用链路的使用笔记
背景
测试在生产验证过程中反馈接口很慢。响应时间为10s左右。
查看日志确实存在慢接口的日志打印
解决思路
由于接口没有任何报错,而且只是等待时间过长。因为初步判断是网络路由问题。
其实arthas提供了针对接口的调用的完整链路打印功能
可是由于生产环境是集群部署的,不清楚请求分给哪个节点处理了。因此使用该工具会比较麻烦。需要每个节点都启动监听
后面发现 skywalking 也是天生支持链路追踪的
需要在 Trace Profiling 中新建任务,定时采样接口请求情况
新建任务各选项
请求接口后,就能看到详细的慢接口调用情况
点击查看可以看到具体的请求接口
skywalking 提供了多种性能剖析(Profiling) 工具帮助定位深入定位应用性能瓶颈
功能名称 | 核心目标 | 剖析维度 | 关键特点 | 主要适用场景 |
---|---|---|---|---|
Trace Profiling | 关联特定慢请求,定位代码行 | 关联特定Trace | 与慢调用链直接关联,精确定位到导致延迟的代码方法或行 | 分析已知的,可复现的慢接口或高延迟调用链 |
eBPF Profiling | 全进程深度剖析,涵盖内核态 | 整个进程(物理实例) | 无需代码侵入,可剖析用户态和内核态执行,生成火焰图,适合分析系统级瓶颈 | 分析系统调用,网络栈,锁竞争等底层性能问题,尤其适合非JVM应用 |
Async Profiling | JVM应用内部剖析 | JVM进程 | 专为JVM设计,支持CPU,内存分配,锁分析,集成async-profiler,开销低 | 深度分析Java应用的CPU热点、内存分配压力、同步锁瓶颈。 |
SkyWalking 提供了多种性能剖析(Profiling)工具来帮助开发者深入定位应用性能瓶颈。它们各有侧重,共同构成了从代码到系统层面的立体化性能分析能力。下面我用一个表格为你快速梳理它们的核心区别,然后再详细说明。
功能名称 | 核心目标 | 剖析维度 | 关键特点 | 主要适用场景 |
---|---|---|---|---|
Trace Profiling | 关联特定慢请求,定位代码行 | 关联特定Trace | 与慢调用链直接关联,精确定位到导致延迟的代码方法或行。 | 分析已知的、可复现的慢接口或高延迟调用链。 |
eBPF Profiling | 全进程深度剖析,涵盖内核态 | 整个进程(物理实例) | 无需代码侵入,可剖析用户态和内核态执行,生成火焰图,适合分析系统级瓶颈。 | 分析系统调用、网络栈、锁竞争等底层性能问题,尤其适合非JVM应用。 |
Async Profiling | JVM应用内部剖析 | JVM进程 | 专为JVM设计,支持CPU、内存分配、锁分析,集成async-profiler,开销低。 | 深度分析Java应用的CPU热点、内存分配压力、同步锁瓶颈。 |
🔍 详细功能介绍
1. Trace Profiling:关联业务逻辑的慢请求分析
Trace Profiling 用于定位导致特定慢请求(Trace)的代码行。当某个接口调用链耗时过长时,你可以针对该Trace发起剖析,SkyWalking Agent会对相关线程进行周期性栈快照。通过分析这些快照,可以统计出哪些方法或代码行耗时最长,从而精准定位问题根源
典型流程:
- 在SkyWalking UI的Trace列表中找到一个慢请求(Trace)。
- 创建Trace Profiling任务,Agent会开始对执行该请求的线程进行采样。
- 分析完成后,查看结果,通常会精确定位到导致延迟的特定代码方法或行
2. eBPF Profiling:系统级的深度性能剖析
eBPF Profiling 利用Linux内核的eBPF技术,无需代码侵入即可对整个进程进行深度监控,包括用户态和内核态的执行情况。它能生成火焰图,帮助你分析系统调用、内核阻塞、网络IO等底层瓶颈,尤其适合分析非JVM应用或需要洞察系统资源的场景
典型流程:
1.确保SkyWalking Rover(eBPF Agent)部署在目标主机上。
2.在UI上选择目标服务或进程,创建eBPF Profiling任务(如On-CPU剖析)。
3.Rover会进行采样,并将数据发送回SkyWalking后端。
4.查看生成的火焰图,分析进程在内核和用户空间的函数耗时分布。
3. Async Profiling:JVM生态的专项利器
Async Profiling 专为JVM应用设计,它集成了async-profiler,能够以很低的开销对Java进程进行CPU、内存分配(Allocation)、锁竞争(Lock)等方面的剖析。这对于分析Java应用的内存压力、同步瓶颈等问题非常有效
支持的分析类型:
- CPU采样:分析JVM的CPU热点方法。
- 内存分配采样:分析对象分配的位置和频率,追踪内存消耗的源头。
- 锁分析:发现同步瓶颈和竞争激烈的锁
典型流程:
-
为Java服务配置SkyWalking Java Agent。
-
在UI上选择目标服务实例,创建Async Profiling任务,选择事件类型(如CPU、ALLOC)。
-
Agent控制async-profiler进行采样,并将生成的JFR文件上传。
-
在UI中分析火焰图或相关报告,定位JVM层面的性能问题