这是否意味着node.js中的内存泄漏?

我使用node.js 0.10.18(在Amazon EC2上)作为我们的ios游戏http服务器。

我使用process.memoryUsage()来打印内存使用情况。 我发现我们的节点的内存使用情况是不正常的。

运行两天后:

machine1节点:

2014-10-13T02:35:04.782Z – 重要:进程:堆总计119.70 MB heap使用84.62 MB的RSS 441.57 MB的

machine2节点:

2014-10-13T02:36:01.057Z – 重要:进程:堆总计744.72 MB heap使用108.19 MB的RSS 1045.53 MB

结果是:

  1. 这两个heapUsage都非常小,它与节点进程运行多长时间无关。

  2. machine2上的heapTotalheapUsed ,在重新启动过程之前,它永远不会变小。 但machine1 heapTotal看起来很正常。

    machine1是Amazon EC2 m3.xlarge, machine2是Amazon EC2 m3.medium。 从Amazon CloudWatch中我知道machine2的性能不足,有时machine2的CPU使用率会达到100%。 那么exceptionheapTotal使用情况是否与硬件的不足有关? 100%的CPU使用率不是我们节点进程的结果,因为使用node-usage模块,我看到我们节点进程的CPU使用率永远不会高于50%。 我认为这个用法是被邻近的虚拟机盗取的(你知道在Amazon EC2上有共享的CPU时间)。

  3. 我知道缓冲区内存使用情况= (rss - heapTotal) 。 我发现两台机器上的缓冲区内存使用量会逐渐增加。 你看,两天运行两次缓冲存储器的用量都超过了300MB。

我的问题是:

  1. 为什么heapTotal即使heapUsed非常小也不会释放heapTotal使用情况? 是节点本身的问题,还是我自己的代码的一些错误? 是解决它升级硬件的唯一方法吗?

  2. 为什么缓冲区使用量逐渐增加? 这是否意味着有内存泄漏? 是节点本身的问题,还是我自己的代码的一些错误? 或者只是忽略它?

谢谢!

从这个posthttps://www.joyent.com/blog/walmart-node-js-memory-leak 。 我发现在<= 0.10.21版本中有一个内存泄漏错误。 该错误在版本0.10.22中得到修复

我升级了节点到最新的版本0.10.32,并增强了machine2的硬件。

两个内存问题都不会再出现。 两者的内存使用量每天只会增加几MB,我认为这是正常的,因为我的节点进程会caching一些玩家数据。

所以也许这两个问题是由同样的原因造成的,而且已经修复了。