Node.js 应用故障排查手册 —— 雪崩型内存泄漏问题( 三 )

楔子

实践篇一中我们也看到了一个比较典型的由于开发者不当使用第三方库 , 而且在配置信息中携带了三方库本身使用不到的信息 , 导致了内存泄漏的案例 , 实际上类似这种相对缓慢的 Node.js 应用内存泄漏问题我们总是可以在合适的机会抓取堆快照进行分析 , 而且堆快照一般来说确实是分析内存泄漏问题的最佳手段 。

但是还有一些问题场景下下应用的内存泄漏非常严重和迅速 , 甚至于在我们的告警系统感知之前就已经造成应用的 OOM 了 , 这时我们来不及或者说根本没办法获取到堆快照 , 因此就没有办法借助于之前的办法来分析为什么进程会内存泄漏到溢出进而 Crash 的原因了 。 这种问题场景实际上属于线上 Node.js 应用内存问题的一个极端状况 , 本节将同样从源自真实生产的一个案例来来给大家讲解下如何处理这类极端内存异常 。

本书首发在 Github , 仓库地址:https://github.com/aliyun-node/Node.js-Troubleshooting-Guide , 云栖社区会同步更新 。

最小化复现代码

同样我们因为例子的特殊性 , 我们需要首先给出到大家生产案例的最小化复现代码 , 建议读者自行运行一番此代码 , 这样结合起来看下面的排查分析过程会更有收获 。 最小复现代码还是基于 Egg.js , 如下所示:

推荐阅读