我已经设置了一个要点来显示从磁盘流式传输文件的小程序随时间推移的内存使用情况。
在process.memoryUsage()
中分配为rss
的内存永远不会关闭。从其他项目中,我知道另一个文件读取将能够重用一些内存,但该内存永远不会释放。
我知道当其他一些进程争用内存时,操作系统可以获取未充分利用的内存并将其写入交换,但这只是一个临时修复(并可能导致我的机器无缘无故地耗尽交换)。
由于这个"泄漏"不在javascript堆中,我真的认为这与我流式传输此文件的方式无关,但是我想要一些确认。我应该做些什么来释放此内存吗?
$ node -v
v0.10.20
我遇到了一个问题,归结为与您的测试用例非常相似的最小测试用例 - 我在 Web 服务器进程中对文件进行了即时 zip 压缩。
为了找到这个线程的人 - 根据节点上的 bnoordhuis .js您打开的错误报告,您必须使用选项 --max_old_space_size=32 --expose_gc
调用您的脚本(将 32 MB 适应您想要的任何内容),然后定期调用 gc()
.这有助于我的测试用例,希望也有助于我的应用程序。
默认限制为 1.5 GB。如果您只想流式传输一些文件,在服务器上没有更多的工作要做,没有要记住的状态,并且您在具有许多其他事情要做的小型服务器上使用了node.js"提高效率",这非常令人惊讶。