2015-09-28 40 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%。 –