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

时间:2014-10-13 03:26:10

标签: node.js memory memory-leaks amazon-ec2 buffer

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

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

跑了两天后:

<{1}}上的

节点:

2014-10-13T02:35:04.782Z - 至关重要:进程:heapTotal 119.70 MB heapUsed 84.62 MB rss 441.57 MB

<{1}}上的

节点:

2014-10-13T02:36:01.057Z - 至关重要:进程:heapTotal 744.72 MB heapUsed 108.19 MB rss 1045.53 MB

结果是:

  1. machine1都非常小,与节点进程的运行时间无关。

  2. machine2上的heapUsageheapTotal大得多,在重新启动流程之前,它永远不会变小。但machine2上的heapUsed似乎正常。

    heapTotal是Amazon EC2 m3.xlarge,machine1是Amazon EC2 m3.medium。从Amazon CloudWatch我知道machine1的性能不足,有时machine2的CPU使用率达到100%。那么异常machine2用法是否与硬件不足有关? 100%的cpu使用率不是我们的节点进程的结果,因为使用machine2模块我看到我们的节点进程的CPU使用率从不高于50%。我认为邻近的虚拟机会盗用这些用法(你知道Amazon EC2上有共享的cpu时间)。

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

  4. 我的问题是:

    1. 即使node-usage非常小,为什么(rss - heapTotal)使用不会被释放?它是节点本身的问题还是我自己的代码的一些错误?是修复它以升级硬件的唯一方法吗?

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

    3. 谢谢!

1 个答案:

答案 0 :(得分:0)

来自这篇文章https://www.joyent.com/blog/walmart-node-js-memory-leak。我发现版本&lt; = 0.10.21中存在内存泄漏错误。该错误已在版本0.10.22中修复

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

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

所以这两个问题可能是由同样的原因引起的,并且已经修复了。