内存泄漏/简单回调在哪里?

时间:2015-09-01 14:41:35

标签: javascript node.js memory memory-leaks

我有简单的代码,但它有内存泄漏,我找不到。几分钟后,内存使用量从75MB增加到180MB并继续运行。在节点v0.12.7上运行

all()

我尝试了节点检查员,但我无法弄清楚泄漏的来源。如果我删除filter / map / reduce / unshift,似乎泄漏消失或只泄漏更少的内存。

1 个答案:

答案 0 :(得分:2)

它实际上可能不是内存泄漏,有时很难告诉Node。 Node.js使用Google的V8 JavaScript引擎,它实现了垃圾收集器。 V8使用的GC算法将尝试占用尽可能多的内存,并且在清理未使用的内存时非常懒惰。因此,通常情况下,节点进程将继续增加内存使用量,直到GC认为更好地释放内存的某个点。请注意,节点进程的硬内存限制为1.4 GB。

有一种方法可以使用--expose-gc标志强制GC释放内存。像这样运行你的服务器:

node --expose-gc yourscript.js

并在应用程序开头的某处附加以下循环。这将每30秒强制进行垃圾收集。

setInterval(function(){
  global.gc();
  console.log('GC done')
}, 1000*30);

然后运行你的代码很长一段时间。如果你的记忆力一直在不断增加,那么它很可能是合法的内存泄漏。