2015-09-28 71 views
-1

我在Ubuntu Server 14.04.3上運行使用PM2的node.js v0.12.7。我有兩個node.js進程,它們具有相同的代碼庫,但看起來稍有不同的一組數據。Node.js不能及時釋放內存

通常,其中一個進程永遠不會消耗超過70 MB的RAM,另一個 - 可以增長到700 MB。如果我添加一個定時器,它使用「node-heapdump」模塊定期轉儲node.js堆,第一個進程增長到大約140 MB RAM,第二個進程急劇下降到大約180 MB的RAM。但是,如果我分析兩個進程的堆轉儲,它們的大小非常相似 - 44.8和50 MB,所以它們之間沒有任何有意義的區別。

與此同時,服務器上只有大約10%的空閒內存(考慮緩衝區/緩存)。

我知道這個問題可能太模糊了,但是當「node-heapdump」不強制定期垃圾回收時,可能需要注意什麼來了解這些進程之間的內存消耗差異?也就是說,在這種情況下顯然沒有「經典」內存泄漏,因爲強制GC釋放內存和內存使用保持一致。如果沒有GC被強制使用,內存使用增長超出了可以解釋的範圍,因爲node.js不考慮GC,因爲內存使用增長的多少以及可用內存有多少。

回答

0

所以,這被證明只是一個有趣的邊緣情況,或者說是一個錯誤,我不得不通過打開/關閉功能進行隔離。這種有趣的「內存泄漏」行爲的原因是一個「promisified」無限循環。我仍然不確定,堆積傾銷是如何「部分解決」它的。

+0

我面臨着一個類似的問題,我們的服務器說80%的消耗,但我正在使用winston的使用模塊來記錄顯示最高內存445mb(1GB RAM)左右,即約。 4.4%。 –