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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值