首页 > 解决方案 > 在我的 Node.js 应用程序中查找内存泄漏

问题描述

监控我的 node.js 应用程序显示我的 RAM 消耗量正在增加。

所以我开始研究代码并进行多次测试,但我不知道如何纠正这些泄漏以及它们的确切来源。

为了测试和查看内存泄漏,我正在运行我的应用程序 node --expose-gc --inspect index.js

在我的 index.js 中:

setInterval(() => {
  // 1. Force garbage collection every time this function is called
  try {
    global.gc();
  } catch (e) {
    console.log("You must run program with 'node --expose-gc index.js' or 'npm start'");
    process.exit();
  }
  const { rss, heapUsed, heapTotal } = process.memoryUsage();
  console.log(
    'rss',
    numeral(rss).format('0.0 ib'),
    'heapUsed',
    numeral(heapUsed).format('0.0 ib'),
    'heapTotal',
    numeral(heapTotal).format('0.0 ib'),
  );
}, 5000);

在我的应用程序 终端堆屏幕截图上执行任何操作后,我可以清楚地看到堆在增长

使用节点检查器,我截取多个屏幕截图并进行比较,但我没有看到任何与我自己的代码相关的内容(内存泄漏似乎来自 moment.js(我的代码中没有任何称为“猜测”的内容)) . 就像我所有的泄漏都来自依赖项一样(我做到了yarn upgrade --latest

如果有人可以查看我的 3 个堆快照以帮助我找出内存泄漏的来源,那真的会对我有所帮助

标签: node.jsexpressmemory-leaksnode-inspector

解决方案


推荐阅读