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

标签 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 内存的非堆内存?

最佳答案

我以前见过这种情况,其中使用的内存报告比 htop 看到的内存小得多。

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

我写了一篇文章,详细介绍了诊断它所采取的步骤,这里太长了。

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

关于javascript - 在 Node.js/Express.js 应用程序上查找内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40046067/

相关文章:

javascript - 如何使用文件输入在 PDFJS 中打开本地 PDF?

php - 如何在 PHP 中将 URL 变量传递给 javascript

java - 检查 linux 命令是否输出空字符串

node.js - 如何优雅地重启node.js服务器?

node.js - 在Webpack中访问动态端口号

javascript - 使用 "Object.create"而不是 "new"

javascript - 没有表格,Dropzone js 无法工作

php - 在 Amazon Linux 上为 MongoDB 安装旧版 PHP 驱动程序

linux - 使用 ansible 启动配置模块 ec2_lc 和安全组名称与 id

node.js - Node js,当包含 "include"和 "where: array[]"选项时,使用偏移量和限制对 findAndCountAll 进行后续处理不起作用