【发布时间】:2013-10-22 06:02:16
【问题描述】:
我设置了一个gist 来显示一个小程序的内存使用情况,该小程序从磁盘流式传输文件。
在process.memoryUsage() 中分配为rss 的内存永远不会下降。从其他项目中,我知道另一个文件读取将能够重用部分内存,但该内存永远不会释放。
我知道当其他一些进程正在满足内存时,操作系统可以占用未充分利用的内存并将其写入交换,但这只是一个临时修复(并且可能导致我的机器无缘无故地用完交换很好的理由)。
由于这个“泄漏”不在 javascript 堆中,我认为这与我流式传输此文件的方式无关,但我想确认一下。我应该做些什么来释放这段内存吗?
$ node -v
v0.10.20
【问题讨论】:
-
是同一个文件吗?
-
要点是一个任意示例,它只流式传输一个文件,但我的实际项目上传和写入/读取许多文件。
-
@PagodaJosh 很可能没有那么贪婪;文件描述符应该已经关闭(绑定到
'close'知道什么时候)。但是,V8 中的垃圾收集器可能尚未运行以释放流使用的内存。对我来说,在大约 330 MB 的文件中流式传输,在'end'和'close'之后,内存使用量下降了大约 45-50 秒。 -
@JonathanLonowski 我的要点显示超过 450 秒的节点保持约 122 兆。
-
@JonathanLonowski 如果你能用你的 330 MB 文件运行我的要点并发布你的结果,我将不胜感激