在node.js中避免“系统内存不足”的最佳方法是什么?

时间:2013-09-25 16:39:43

标签: node.js memory-management v8

我正在开发一个需要处理数十个活跃套接字并发连接的项目。现在一直在查看内存使用情况和V8引擎,我使用的是Node.js v0.10.19(稳定版)

我无法承受“系统内存不足”事件的发生。因此,目前正在运行多达15个节点实例,每个实例在一台服务器上限制为1GB的RAM,并且具有足够的RAM以便与其一起运行。使用四核xeon处理器和负载均衡器来组织所有实例的负载。

那么,有没有办法在V8 Heap堆栈之外存储套接字连接,如缓冲区或其他方式,以减少Node.js内存使用量?

1 个答案:

答案 0 :(得分:1)

当然,由于您要保持数千或数万个连接打开,因此这样做会产生内存成本。

这就是我要问的问题:

您是在向数组或正在填充的对象中添加内容吗?

您是否为每个打开的连接实例化重型模块?

你能运行一个分析器来看看它在做什么吗? (人们对DTrace赞不绝口。)

是否可以按间隔轮询您想要的内容而不是保持Web套接字打开?

如果您无法运行探查器,您可以尝试的其他功能是在运行时记录应用程序的状态,以便您可以分析问题。这是一种oldschool技术,但您可以在每次函数结束时进行记录,并查看当前的内存使用情况。这也可能会扼杀一些记忆,但如果你发现问题,那就太好了。

通过处理模块检查内存使用情况:

http://nodejs.org/api/process.html#process_process_memoryusage

祝你好运,请让我知道你发现了什么。我很想知道你是如何解决这个非常具有挑战性的问题的。