Skywalking链路追踪自身耗时和总耗时算法分析
Skywalking链路追踪自身耗时和总耗时算法分析 Skywalking链路追踪技术中,了解自身耗时和总耗时的计算方法是非常重要的。本文将对Skywalking链路追踪中自身耗时和总耗时的计算方法进行分析。 Trace、TraceSegment和Span之间的关系模型 在Skywalking链路追踪中,Trace、TraceSegment和Span是三个基本概念。其中,Trace是整个追踪链路的入口,TraceSegment是追踪链路中的一个或多个Span的组合,而Span则是追踪链路中的一个基本单元。一个Span可能有零个、一个或多个children Span。 自身耗时和总耗时的计算方法 在Skywalking链路追踪中,自身耗时和总耗时是两个重要的概念。自身耗时指的是当前Span的执行时间,而总耗时则是当前Span及其所有子Span的执行时间之和。计算方法可以分为两种情况: 1. 如果当前Span没有任何children Span时: 当前Span的自身耗时 = 当前Span的endTime - 当前Span的startTime; 当前Span的总耗时 = 当前Span的自身耗时; 2. 如果当前Span有children Span时: 当前Span的自身耗时 = (当前Span的endTime - 当前Span的startTime) - (子Span的endTime - 子Span的startTime); 当前Span的总耗时 = 当前Span的endTime - 当前Span的startTime; Span创建的流程 Span的创建流程可以分为以下几个步骤: 1. 在字节码增强拦截器中,拦截目标实例的方法定义如下: beforeMethod()是方法调用的前核心API,在该方法中createSpan,生成startTime; afterMethod()是方法调用的后核心API,在该方法中stopSpan,生成endTime; 2. 生成Span的startTime和endTime后,计算当前Span的自身耗时和总耗时。 耗时公式的推导 根据上述计算方法,我们可以推导出耗时公式: 1. 如果当前Span没有任何children Span时: 当前Span的自身耗时 = 当前Span的endTime - 当前Span的startTime; 当前Span的总耗时 = 当前Span的自身耗时; 2. 如果当前Span有children Span时: 当前Span的自身耗时 = (当前Span的endTime - 当前Span的startTime) - (子Span的endTime - 子Span的startTime); 当前Span的总耗时 = 当前Span的endTime - 当前Span的startTime; 证明 我们可以通过以下几个插件的示例来证明上述计算方法的正确性: 1. undertow-2.x-plugin插件: 创建EntrySpan时,开始记时,stopSpan后结束记时。验证结果:对比UI显示耗时和代码锚点耗时检测的值,可以知: 当Span有children Span时: 当前Span的自身耗时 = (当前Span.endTime - 当前Span.startTime) - (子Span.endTime - 子Span.startTime); 当前Span的总耗时 = 当前Span.endTime - 当前Span.startTime; 2. mvc-annotation-5.x-plugin插件: 创建EntrySpan时,验证结果: 假如当前Span是父Span: 父Span的自身耗时 = (父Span.endTime - 父Span.startTime) - (子Span.endTime - 子Span.startTime); 3. httpClient-4.x-plugin插件: 创建ExitSpan时,验证结果: 当前Span的自身耗时 = 当前Span.endTime - 当前Span.startTime; parent1的自身耗时 = (parent1.endTime - parent1.startTime) - (当前Span.endTime - 当前Span.startTime); parent2的自身耗时 = (parent2.endTime - parent2.startTime) - (parent1.endTime - parent1.startTime); parent3的自身耗时 = (parent3.endTime - parent3.startTime) - (parent2.endTime - parent2.startTime); 4. netty-apsaras-4.x-plugin插件: 创建EntrySpan时,验证结果: ApsarasClient组件的exitSpan有五个parent Span: 1)ApsarasClient组件的exitSpan 2)SpringMVC组件的entrySpan 3)HttpClient组件的exitSpan 4)SpringMVC组件的entrySpan 5)Undertow组件的LocalSpan Skywalking链路追踪中自身耗时和总耗时的计算方法可以分为两种情况,并可以通过插件示例来证明其正确性。
剩余16页未读,继续阅读
- 粉丝: 269
- 资源: 17
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- MindSpore 助力下的 GPT2:数据集加载处理及模型全攻略
- Java开发模块开源文档模板
- 拼接字符串形成私钥进而获得对应地址
- 团队详细策划案.docx
- Kylin-Server-V10-SP2-vsftpd依赖和安装包
- selective-scan-cuda-core.cp310-win-amd64.pyd
- selective-scan-0.0.2-cp310-cp310-win-amd64.whl (包含core)
- 技嘉H310M s2 2.0魔改BIOS 基于官方最新F14A改的,支持6/7/8/9 支持E3V5 E3
- 图吧工具箱_sm70025767e.exe
- 097N04L-VB一款N-Channel沟道DFN8(3X3)的MOSFET晶体管参数介绍与应用说明
评论10