node.js文件内存泄漏?

我看到一个内存泄漏,下面的代码:

while (true) { console.log("Testing."); } 

我已经尝试过定义string,只是使用一个常量,但它泄漏内存,仍然:

 var test = "Testing."; while (true) { console.log(test); } 

如果我使用文件而不是标准日志,则发生相同的泄漏:

 var test = "Testing."; var fh = fs.createWriteStream("test.out", {flags: "a"}); while (true) { fh.write(test); } 

我想也许是因为我没有正确closures文件,但我试过这个,仍然看到了泄漏:

 var test = "Testing"; while (true) { var fh = fs.createWriteStream("test.out", {flags: "a"}); fh.end(test); fh.destroy(); fh = null; } 

有没有人有任何提示,我应该如何写内容不漏内存?

发生这种情况是因为你从不给节点处理“写入成功”事件的机会,所以他们无休止地排队。 为了给节点一个处理它们的机会,你必须让事件循环不时地进行一次迭代。 这不会泄漏:

 function newLine() { console.log("Testing."); process.nextTick(newLine); } newLine(); 

在实际使用的情况下,这不是问题,因为几乎不需要一次写出如此大量的数据。 如果是这样,请不时循环事件循环。

然而,第二个问题也出现在nextTick技巧中:写入是asynchronous的,如果控制台/文件/任何比节点慢的节点,节点都会无限地缓冲数据,直到输出再次释放为止。 为了避免这种情况,在编写一些东西之后,你必须听取drain事件 – 它告诉你什么时候pipe道再次空闲。 请参阅: http : //nodejs.org/docs/latest/api/streams.html#event_drain_