如果本项目对您有帮助,欢迎 star 支持下作者:https://github.com/hyj1991/easy-monitor


笔者从 2014 年开始入坑 Node.js,也算是国内比较早开始从事全职 Node.js 开发的工程师,早期被诸如有问题的三方库导致的内存泄漏以及正则回溯引起的 JS 主线程卡死等疑难杂症坑过,所以在写了 3 年业务开发后,从 2017 年开始基本上一直致力于 Node.js 性能监控工具链的研究与工作,Easy-Monitor 的各个版本可以说是每个研究阶段的总结。

I. 1.0 版本

在 2017 年笔者开始编写 Easy-Monitor 1.0 版本,彼时限于自身对 Node.js 内核的理解以及掌握的极其有限前端技术(当时实际上是纯 Node.js 后端工程师),做出来的版本使用体验上比较简陋,以下是主界面:

image.png


对这段历史有兴趣的同学可以移步 CNODE 社区看下当时的帖子:轻松排查线上Node内存泄漏问题

II. 2.0 版本

实际上 1.0 版本虽然功能上非常简陋,但是当时在社区还是得到了不少的反馈信息,在 CNODE 社区隔三差五也能看到有问 Easy-Monitor 安装使用遇到问题的讨论,因此在 2017 年 5 月份开始着手进行 2.0 版本的开发。


2.0 版本也可以说是笔者第一次真正开始从后端 Node.js 工程师迈向全栈的一个契机,当时在前端展示技术栈选择了 2017 年已经非常火热的 Vue.js,同时借助于 iView 中后台组件框架(现在原主要贡献者已经独立成立新公司,项目更名为 view-design),编写了一套全新的 UI 与后端处理逻辑:

image.png

2.0 版本的大框架逻辑沿用至今,期间根据使用同学的反馈更新了约 30+ 的版本,项目 Github 仓库也收获了约 1300+ Star:

image.png

这是 Easy-Monitor 2.0 版本发布时在 CNODE 社区的帖子:Easy-Monitor 2.0: 开启你的 Node.js 内核性能监控

III. 3.0 版本

2.0 版本的完成也给予了笔者前往国内最大的 Node.js 应用方——阿里巴巴的机会,当时在朴灵老师的帮助下笔者进入了 AliNode 团队,彼时 AliNode 支撑着阿里内部数以千计的 Node.js 应用(全栈,BFF,游戏等类型应有尽有),因此笔者得以参与到各种花式线上疑难杂症的定位与排查案例中,也根据这些案例的反馈和自身的总结进一步开发了 AliNode 全新的内存泄漏分析工具与 Coredump 分析工具。


实际上无论处于何时,AliNode 团队的工作经历给予了笔者巨大的成长与信心——原来 99% 的 Node.js 应用故障在有合适的工具链的支撑之下是可以完美解决的(而不是简单的重启应用),AliNode 最终也于 2017 年底完成商业化成为阿里云上对外的一款免费产品,为国内其它 Node.js 开发者的应用保驾护航。


时间指向了 2020 年,时隔 2.0 发布的两年多之后,笔者也因为一些私人原因离开了团队,彼时对接 AliNode 内外部的使用同学的时候,也看到了大家对 AliNode 进一步优化的一些诉求,主要集中在:


最后就是笔者在维护 AliNode Runtime 过程中感受到的一些直接基于 Node.js Runtime 进行插桩带来的巨大的代码合并维护成本——这意味着最少的情况下上游每一个 LTS 版本你都得去合并发布,每一次 V8 或者 Runtime 架构调整都会导致增加的代码需要跟着重写。


所以于 2020 年初笔者开始编写 Easy-Monitor 3.0 版本,此版本下性能日志的输出和内核采样命令的执行逻辑完全基于 Node.js Addon 实现:


以下是 3.0 版本的控制台概览:

image.png

进程概览页面:

image.png

模块风险页面:

image.png

更多 3.0 版本的内容可以参见本指南其余章节。