在做 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 的主要参数说明如下表所示: