2013-10-14 92 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來「提高效率」,這是非常令人驚訝的。