• node应用故障定位顶级技巧—动态追踪技术[Dynamic Trace]


    背景和行文目的

    在做 node 或者其他语言的软件开发时,是否有以下经历:

    1. 测试环境一切正常,发到生产环境后,出现诡异问题且难以定位
    2. 不同机器、不同容器上,某些逻辑呈现不同的结果,如时区、 host
    3. 对于时好时坏的玄学问题,束手无策,没有完整的解决思路,无头苍蝇般的各种尝试,效率低下
    4. 遇到坑,习惯搜网友解决方案,然后试很多方案,都不能解决问题,此时就会感觉头皮发麻😂

    我相信,上述我说的经历,大多数人都会有所共鸣。本文,我将尽可能的把我所学的动态追踪技术分享给大家。

    文章内容如下所示:

    1. 介绍 Dynamic Trace 的概念、优势、原理和用法(我们需要掌握的那部分)
    2. 通过 demo , 展示 Dynamic Trace 技术的强大
    3. 实战演示: 搭建 node 性能监控 easy-monitor 和构建 node 应用,构造诡异故障,并阐述如何用 Dynamic Trace 去精确快速定位
    4. 分享代码: 会把实战演示的代码放到 github 上,大家可以 clone 自行去体验
    5. 动态追踪技术的未来: 介绍下目前最领先的 Dynamic Trace 方案
    6. 总结: 做一个精简的总结
    7. 附: 其他内容

    话不多说,直接开整。

    动态追踪技术

    是什么

    这里我把章亦春大佬的原话引用过来:

    动态追踪技术其实是一种后现代的高级调试技术。它可以帮助软件工程师以非常低的成本,在非常短的时间内,回答一些很难的关于软件系统方面的问题,从而更快速地排查和解决问题。

    优势

    优势如下:

    • 随时随地,按需采集
    • 基于操作系统内核实现,性能损耗极小

    原理

    动态追踪的事件源根据事件类型不同,主要分为静态探针、动态探针以及硬件事件,其原理如下图所示:

    看不懂也正常,我也看不懂,不过会用进行,就跟你不会造车,但你可以把车开的很溜。

    简单点说,就是在 linux 中,进程不能直接访问硬件设备,当进程需要访问硬件设备时,如 IO 操作,必须由用户态切换至内核态,然后通过操作系统调用硬件设备。 所以可以通过跟踪进程产生的系统调用,来获得参数、返回值、执行时间,从而完成动态追踪。

    我们用的多的是动态探针,它可以让我们实时分析线上运行的程序。

    用法

    动态追踪工具有 stracedtrusssystemtapperfdtraceeBPF 等,我这边使用的是 stracedtruss

    也就是 linux 环境使用 stracemacos 系统使用 dtruss

    strace 的主要参数说明如下表所示:

  • 相关阅读:
    通过Power Platform自定义D365CE业务需求 - 1. Microsoft Power Apps 简介
    医疗产品设计的重要性,你了解多少?
    pdf密码怎么解除?几种破解方法来看看
    db.sqlite3
    笔记1.5:计算机网络体系结构
    美日两国利差或继续增大 美元兑日元势创24年新高?
    for...in 与 for...of 的用法与区别
    IDEA 构建web项目-详细教程
    框架安全-CVE 复现&Spring&Struts&Laravel&ThinkPHP漏洞复现
    tsf consul单独使用,可以在tsf部署不
  • 原文地址:https://blog.csdn.net/java_beautiful/article/details/126816343