zl程序教程

您现在的位置是:首页 >  其他

当前栏目

Skywalking使用篇(三):性能剖析

2023-04-18 14:05:30 时间

简介

在系统性能监控方法上,Skywalking 提出了代码级性能剖析这种在线诊断方法。这种方法基于一个高级语言编程模型共性,即使再复杂的系统,再复杂的业务逻辑,都是基于线程去进行执行的,而且多数逻辑是在单个线程状态下执行的。
代码级性能剖析就是利用方法栈快照,并对方法执行情况进行分析和汇总。并结合有限的分布式追踪 span 上下文,对代码执行速度进行估算。

优势

  1. 精确的问题定位,直接到代码方法和代码行
  2. 无需反复的增删埋点,大大减少了人力开发成本
  3. 不用承担过多埋点对目标系统和监控系统的压力和性能风险
  4. 按需使用,平时对系统无消耗,使用时的消耗稳定可能

使用步骤

使用工程

Live-Demo 工程中 projectB 项目
修改 DatabaseOperateDao#selectUser 方法,设置一个4s的睡眠
在这里插入图片描述

新建任务

监控 /projectB/1234 端点,持续5分钟
在这里插入图片描述

需要注意的点

  • 一个服务在监控持续时间内只能设置一个端点监控任务

源码逻辑入口
org.apache.skywalking.oap.server.core.profile.ProfileTaskMutationService``#checkDataSuccess
在这里插入图片描述

  • 剖析端点的响应时间必须大于监控间隔时间

由于性能栈快照有一定的性能消耗,所以采集周期不宜过密,SkyWalking 目前不支持小于 10ms 的采集间隔。所以如果问题方法执行时间小于 10ms,此方法并不适用。同时剖析端点的响应速度如果小于监控时间间隔,也无法进行监控采集。

发送请求

curl http://localhost:8764/projectB/1234

查看剖析结果

在这里插入图片描述

上图所示的就是链路追踪时的真实执行情况,表格中从左到右分别展示了方法名、开始时间、执行时长、执行时间占比、API类型、服务名和跨度信息。其中可以看到前面设置了4s睡眠的 selectUser 方法执行速度最慢。再点击分析按钮,可以查看对应方法的调用栈。
在这里插入图片描述
从左右到右分别展示了栈帧名称、该栈帧总计耗时(包含其下面所有自栈帧)、当前栈帧自身耗时和监控次数
继续向下查找可以发现 selectUser 的栈桢信息,从这里可以看到方法是真正卡在了线程睡眠逻辑中
在这里插入图片描述