在 Chrome 开发人员工具中分析堆转储(内存泄漏)

Profiling heapdumps in Chrome Developer Tools (memory leak)

我在使用 NodeJS/Express/React 正在生产的应用程序时遇到了一些问题。

问题是,它不断攀升内存使用量,而且不会停止。它缓慢而稳定,最终 Node 崩溃了。我有几个在节点堆转储的帮助下创建的堆转储,但是,我不知道如何正确识别泄漏。

我将分享我的快照图像。请注意,我按较浅的大小排序,所以据推测出现在顶部的 objects/types 之一一定是问题所在:

正如我在下面看到的,我在很多地方都看到了这个 "Promis in @585",可能就是那个,但我无法识别那条线、函数或组件。

有人可以帮忙吗?如果你愿意,我可以分享更多截图。

谢谢。

我发现了问题。

我在我的应用程序中使用 React Body 类名,因此当我们加载不同的路由时,我们可以从客户端更改主体 class。当您进行服务器端渲染时,此 npm 模块需要与 Rewind() 函数一起使用,以避免内存泄漏:

这是我正在谈论的模块:

https://github.com/iest/react-body-classname

并且,为了避免内存泄漏,我们正在调用:

BodyClassName.rewind()

在我们主要 App.js 容器组件的渲染函数中。这样,无论 url 用户登陆什么, Rewind() 将始终被调用,因此将来可以正确释放可以被垃圾收集的数据。

现在我们的应用程序的内存使用量保持在 120mb 的稳定水平。

谢谢你 :D