如何请求node.js中的垃圾收集器运行?

时间:2014-12-05 18:02:30

标签: javascript node.js garbage-collection

在启动时,似乎我的node.js应用程序使用大约200MB的内存。如果我暂时不管它,它会缩小到大约9MB。

是否可以从应用内部:

  1. 检查应用程序使用了多少内存?
  2. 请求垃圾收集器运行?
  3. 我问的原因是,我从磁盘加载了一些临时处理的文件。这可能会导致内存使用量激增。但我不希望在GC运行之前加载更多文件,否则存在内存不足的风险。

    有什么建议吗?

3 个答案:

答案 0 :(得分:77)

如果使用--expose-gc标志启动节点进程,则可以调用global.gc()强制节点运行垃圾回收。请注意,节点应用中的所有其他执行都会暂停,直到GC完成,因此不要经常使用它,否则会影响性能。

您可能希望在代码中进行GC调用时包含一项检查,以便在没有标记的情况下运行节点时不会出现问题:

try {
  if (global.gc) {global.gc();}
} catch (e) {
  console.log("`node --expose-gc index.js`");
  process.exit();
}

答案 1 :(得分:6)

Node允许我们手动触发垃圾收集。这可以通过运行具有--expose-gc标志的节点(即node --expose-gc index.js)来完成 一旦节点在该模式下运行,您可以通过从程序中调用global.gc()来以编程方式触发垃圾收集。

前 -

// Force garbage collection every time this function is called
try {
  if (global.gc) {global.gc();}
} catch (e) {
  console.log("`node --expose-gc index.js`");
  process.exit();
}

答案 2 :(得分:-5)

我建议的一点是,除非您在启动时需要这些文件,否则请尝试仅在需要时加载。

编辑:请参阅上面的帖子。