2013-10-14 91 views
1

我已经设置了一个gist来显示内存使用率随着时间的推移从磁盘流文件的小程序。nodejs fs似乎贪婪

process.memoryUsage()中分配为rss的内存永远不会下降。从其他项目我知道另一个文件读取将能够重新使用一些内存,但该内存永远不会释放。

我知道当某些其他进程满足内存要求时,操作系统可能会占用内存不足并将其写入交换空间,但这只是一个临时修复(并且可能导致我的计算机无法使用交换空间没有很好的理由)。

由于这个'泄漏'不在JavaScript堆中,我真的不认为它与我传输此文件的方式有关,但我希望得到一些确认。有什么我应该做的,导致这个内存被释放?

$ node -v 
v0.10.20 
+0

它是完全相同的文件吗? –

+0

该要点是一个任意的例子,它只流一个文件,但我的实际项目上传和写/读许多文件。 – PagodaJosh

+0

@PagodaJosh这很可能不是那么贪婪;文件描述符应该已经关闭(绑定到“close”来知道什么时候)。但是,V8中的垃圾收集器可能还没有运行以释放流所使用的内存。对于我来说,在一个大约330 MB的文件中,内存使用量会在“结束”和“关闭”之后下降45-50秒。 –

回答

0

我认为可以归结为一个最小的测试用例非常相似,你的一个问题 - 我没有文件上的即时zip压缩在Web服务器进程。

对于谁发现这个线索的人着想 - 根据上the node.js bugreport you opened bnoordhuis,你必须打电话给你的脚本选项--max_old_space_size=32 --expose_gc(适应32 MB到任何你想要的),然后调用定期gc()。这有助于我的测试案例,并希望我的应用程序。

默认限制为1.5 GB。如果你只是想传输一些文件,在服务器上做更多的工作,没有记住的状态,并且在有很多其他事情要做的小型服务器上使用node.js来“提高效率”,这是非常令人惊讶的。