【问题标题】:Does it mean memory leaks in node.js?这是否意味着 node.js 中的内存泄漏?
【发布时间】:2014-12-07 13:49:59
【问题描述】:

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

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

跑了两天后:

machine1 上的节点:

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

machine2 上的节点:

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

结果是:

  1. heapUsages 都非常小,与节点进程运行多长时间无关。

  2. machine2 上的heapTotal 比heapUsed 大得多,在我重新启动进程之前它永远不会变小。但machine1 上的heapTotal 似乎很正常。

    machine1 是 Amazon EC2 m3.xlarge,machine2 是 Amazon EC2 m3.medium。从 Amazon CloudWatch 我知道machine2 的性能不足,有时machine2 的 CPU 使用率达到 100%。那么heapTotal使用异常是否与硬件不足有关呢? 100% cpu 使用率不是我们节点进程的结果,因为使用node-usage 模块我看到我们节点进程的 cpu 使用率从未高于 50%。我认为使用量被相邻的虚拟机窃取(您知道 Amazon EC2 上有共享 cpu 时间)。

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

我的问题是:

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

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

谢谢!

【问题讨论】:

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


    【解决方案1】:

    来自这个帖子https://www.joyent.com/blog/walmart-node-js-memory-leak。我发现版本

    我将node升级到了最新的0.10.32版本,同时还增强了machine2的硬件。

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

    所以这两个问题可能是同一个原因造成的,已经修复了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-07
      • 2013-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多