在Node.js / Express.js应用程序中查找内存泄漏

时间:2016-10-14 14:49:20

标签: javascript linux express memory-leaks node-memwatch

我有一个Express.js网络应用程序因内存问题而不断破解:

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap
out of memory

当我启动服务时,内存使用量约为170Mb(由htop报告为RES内存)。然后我开始向它发出请求,内存开始上升。 我使用memwatch尝试跟踪内存泄漏的问题,但memwatch.HeapDiff()报告的内容如下:

{ before: { nodes: 2093729, size_bytes: 197165296, size: '188.03 mb' },
  after: { nodes: 2491264, size_bytes: 232097040, size: '221.34 mb' },
  ...

...我明白该应用程序正在使用221.34mb的堆;但是对于htop,内存使用量在中断时大约为2GB。

问题是,如果我的假设是正确的,那么仍然可以使用htop作为RES内存报告的非堆内存?

1 个答案:

答案 0 :(得分:2)

我以前见过这个,其中使用的内存比htop看到的内存要小得多。

在我们的例子中,JavaScript中的内存泄漏看起来很小,但修复时解决了内存问题。

我写了一篇文章,详细说明了我为诊断它所采取的步骤,这里发布的时间太长了。

https://www.alexkras.com/simple-guide-to-finding-a-javascript-memory-leak-in-node-js/