我正在开发一个项目,需要处理数十个活跃的套接字并发连接.现在一直在查看内存使用情况和V8引擎,我使用的是Node.js v0.10.19(稳定版) 我无法承受“系统内存不足”事件的发生.因此,目前
我无法承受“系统内存不足”事件的发生.因此,目前正在运行多达15个节点实例,每个实例在一台服务器上限制为1GB的RAM,并且具有足够的RAM以便与其一起运行.使用四核xeon处理器和负载均衡器来组织所有实例的负载.
那么,有没有办法在V8堆栈外部存储套接字连接,如缓冲区或其他方式,以减少Node.js内存使用?
当然,由于您要保持数千或数万个连接打开,因此这样做会产生内存成本.这就是我要问的问题:
您是在向数组或正在填充的对象中添加内容吗?
您是否为每个打开的连接实例化重型模块?
你能运行一个分析器来看看它在做什么吗? (人们对DTrace赞不绝口.)
是否可以按间隔轮询您想要的内容而不是保持Web套接字打开?
如果您无法运行探查器,您可以尝试的其他任务是在运行时记录应用程序的状态,以便您可以分析问题.这是一种oldschool技术,但您可以在每次函数结束时进行记录,并查看当前的内存使用情况.这也可能会扼杀一些记忆,但如果你发现问题,那就太好了.
通过Process模块检查内存使用情况:
http://nodejs.org/api/process.html#process_process_memoryusage
祝你好运,请让我知道你发现了什么.我很想知道你是如何解决这个非常具有挑战性的问题的.