背景和行文目的
在做 node 或者其他语言的软件开发时,是否有以下经历:
- 测试环境一切正常,发到生产环境后,出现诡异问题且难以定位
- 不同机器、不同容器上,某些逻辑呈现不同的结果,如时区、
host - 对于时好时坏的玄学问题,束手无策,没有完整的解决思路,无头苍蝇般的各种尝试,效率低下
- 遇到坑,习惯搜网友解决方案,然后试很多方案,都不能解决问题,此时就会感觉头皮发麻😂
我相信,上述我说的经历,大多数人都会有所共鸣。本文,我将尽可能的把我所学的动态追踪技术分享给大家。
文章内容如下所示:
- 介绍
Dynamic Trace的概念、优势、原理和用法(我们需要掌握的那部分) - 通过
demo, 展示Dynamic Trace技术的强大 - 实战演示: 搭建
node性能监控easy-monitor和构建node应用,构造诡异故障,并阐述如何用Dynamic Trace去精确快速定位 - 分享代码: 会把实战演示的代码放到
github上,大家可以clone自行去体验 - 动态追踪技术的未来: 介绍下目前最领先的
Dynamic Trace方案 - 总结: 做一个精简的总结
- 附: 其他内容
话不多说,直接开整。
动态追踪技术
是什么
这里我把章亦春大佬的原话引用过来:
动态追踪技术其实是一种后现代的高级调试技术。它可以帮助软件工程师以非常低的成本,在非常短的时间内,回答一些很难的关于软件系统方面的问题,从而更快速地排查和解决问题。
优势
优势如下:
- 随时随地,按需采集
- 基于操作系统内核实现,性能损耗极小
原理
动态追踪的事件源根据事件类型不同,主要分为静态探针、动态探针以及硬件事件,其原理如下图所示:

看不懂也正常,我也看不懂,不过会用进行,就跟你不会造车,但你可以把车开的很溜。
简单点说,就是在 linux 中,进程不能直接访问硬件设备,当进程需要访问硬件设备时,如 IO 操作,必须由用户态切换至内核态,然后通过操作系统调用硬件设备。 所以可以通过跟踪进程产生的系统调用,来获得参数、返回值、执行时间,从而完成动态追踪。
我们用的多的是动态探针,它可以让我们实时分析线上运行的程序。
用法
动态追踪工具有 strace 、 dtruss 、 systemtap 、 perf 、 dtrace 、 eBPF 等,我这边使用的是 strace 和 dtruss 。
也就是 linux 环境使用 strace , macos 系统使用 dtruss 。
strace 的主要参数说明如下表所示:
| 参数名 | 含义 |
|---|---|
| -v</ |

本文介绍了动态追踪技术在定位Node应用故障中的重要作用。通过讲解Dynamic Trace的概念、优势和用法,以及实战演示如何使用strace和dtrace进行问题排查,展示了这种技术如何帮助开发者高效解决线上问题。文章还探讨了动态追踪技术的未来工具,如bpftrace,以及其在软件调试领域的前景。
最低0.47元/天 解锁文章
948

被折叠的 条评论
为什么被折叠?



