我使用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
结果是:
machine1
都非常小,与节点进程的运行时间无关。
machine2
上的heapUsage
比heapTotal
大得多,在重新启动流程之前,它永远不会变小。但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时间)。
我知道缓冲区内存使用率= heapTotal
。我发现两台机器上的缓冲内存使用量会逐渐增加。你看,运行两天后,两个缓冲存储器的使用量都超过了300MB。
我的问题是:
即使node-usage
非常小,为什么(rss - heapTotal)
使用不会被释放?它是节点本身的问题还是我自己的代码的一些错误?是修复它以升级硬件的唯一方法吗?
为什么缓冲区的使用逐渐增加?这是否意味着存在内存泄漏?它是节点本身的问题还是我自己的代码的一些错误?或者只是忽略它?
谢谢!
答案 0 :(得分:0)
来自这篇文章https://www.joyent.com/blog/walmart-node-js-memory-leak。我发现版本&lt; = 0.10.21中存在内存泄漏错误。该错误已在版本0.10.22中修复
我将节点升级到最新版本0.10.32,并且还增强了machine2的硬件。
两个内存问题都不会再次出现。两者的内存使用量每天只增加几MB,我认为这是正常的,因为我的节点进程会缓存一些播放器数据。
所以这两个问题可能是由同样的原因引起的,并且已经修复了。