简介
在系统性能监控方法上,Skywalking 提出了代码级性能剖析这种在线诊断方法。这种方法基于一个高级语言编程模型共性,即使再复杂的系统,再复杂的业务逻辑,都是基于线程去进行执行的,而且多数逻辑是在单个线程状态下执行的。
代码级性能剖析就是利用方法栈快照,并对方法执行情况进行分析和汇总。并结合有限的分布式追踪 span 上下文,对代码执行速度进行估算。
优势
- 精确的问题定位,直接到代码方法和代码行
- 无需反复的增删埋点,大大减少了人力开发成本
- 不用承担过多埋点对目标系统和监控系统的压力和性能风险
- 按需使用,平时对系统无消耗,使用时的消耗稳定可能
使用步骤
使用工程
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
查看剖析结果
文章来源:https://www.toymoban.com/news/detail-408053.html
上图所示的就是链路追踪时的真实执行情况,表格中从左到右分别展示了方法名、开始时间、执行时长、执行时间占比、API类型、服务名和跨度信息。其中可以看到前面设置了4s睡眠的 selectUser
方法执行速度最慢。再点击分析按钮,可以查看对应方法的调用栈。
从左右到右分别展示了栈帧名称、该栈帧总计耗时(包含其下面所有自栈帧)、当前栈帧自身耗时和监控次数
继续向下查找可以发现 selectUser
的栈桢信息,从这里可以看到方法是真正卡在了线程睡眠逻辑中
文章来源地址https://www.toymoban.com/news/detail-408053.html
到了这里,关于Skywalking使用篇(三):性能剖析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!