node.js - 这是否意味着 Node.js 中存在内存泄漏?

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

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

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

运行两天后:

machine1 上的 Node :

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

machine2 上的 Node :

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

结果是:

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

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

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

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

我的问题是:

  1. 为什么即使heapUsed很小,heapTotal使用量也不会被释放?是 Node 本身的问题还是我自己代码的一些错误?解决这个问题的唯一办法就是升级硬件吗?

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

谢谢!

最佳答案

来自这篇文章https://www.joyent.com/blog/walmart-node-js-memory-leak 。我发现<= 0.10.21版本存在内存泄漏bug。并且在0.10.22版本中修复了该bug

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

这两个内存问题再也没有出现过。两者的内存使用每天只会增加几MB,我认为这是正常的,因为我的 Node 进程会缓存一些玩家数据。

因此,这两个问题可能是由同一原因引起的,并且已得到修复。

关于node.js - 这是否意味着 Node.js 中存在内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26332508/

相关文章:

c - 地址占用多少字节?

ios - 仪器的色 block 是什么意思?

node.js - 有没有一个简单的工具来下载/安装和升级 Node.JS?

node.js - Mongo : Group, 推送并排序

javascript - 将elasticsearch js 与bluebird 结合起来

C 内存泄漏 fsanitize=address

Python不在for循环中释放内存

node.js - 是否有任何自定义库来生成与 nodejs 中的 mysql 表等效的实体

c++ - 我的 C++ 软件是太多 exe 的集合,我该如何管理它

c++ - 从C++中的链表中删除指针