【发布时间】: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
结果是:
-
heapUsages 都非常小,与节点进程运行多长时间无关。 -
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 时间)。 -
我知道缓冲内存使用 =
(rss - heapTotal)。我发现两台机器上的缓冲内存使用量都会逐渐增加。你看,运行两天后,这两个缓冲内存的使用量都超过了 300MB。
我的问题是:
-
为什么即使
heapUsed很小,heapTotal的使用量也不会被释放?是节点本身的问题还是我自己的代码的一些错误?修复它的唯一方法是升级硬件吗? -
为什么缓冲区使用量逐渐增加?这是否意味着存在内存泄漏?是节点本身的问题还是我自己的代码的一些错误?还是直接忽略?
谢谢!
【问题讨论】:
标签: node.js memory memory-leaks amazon-ec2 buffer