我在Ubuntu Server 14.04.3上使用PM2运行node.js v0.12.7。我有两个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 :(得分:0)
所以,这被证明只是一个有趣的边缘情况或者更确切地说 - 一个错误,我必须通过打开/关闭功能来隔离。这种有趣的“内存泄漏”行为的原因是“有希望的”无限循环。我还不确定,堆倾销是如何“部分解决”它的。