4

我正在开发一个需要处理成千上万个活动套接字并发连接的项目。现在一直在查看内存使用情况和 V8 引擎,我使用的是 Node.js v0.10.19 (Stable)

我不能承受“系统内存不足”事件的发生。因此,目前正在努力在单个服务器上运行多达 15 个节点实例,每个节点实例的 RAM 限制为 1GB,具有足够的 RAM 运行该服务器,并使用四核至强处理器和负载均衡器来组织所有实例的负载。

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

4

1 回答 1

1

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

这就是我要问的:

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

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

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

是否可以定期轮询您想要的内容,而不是保持 Web 套接字打开?

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

检查内存使用情况是通过 Process 模块完成的:

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

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

于 2013-09-29T16:48:16.593 回答