我正在使用带有socket.io的 Node v4.2.1(我什至已经测试了websocket/ws获得“更好”的结果,但仍然不够)。目前打开的连接很少(数百个),内存使用率为 38%(我在 AWS t2.small Ubuntu 14.04.2 LTS (GNU/Linux 3.13.0-48-generic x86_64) 上运行) .
服务器代码非常简单(仅用于测试):
... declaration ...
io.on('connection', function(socket){
socket.send("hi");
});
就客户端代码而言,我使用的是相应的socket.io版本。 套接字怎么可能占据内存中的所有空间?
此外,我正在关注这篇文章:
http://www.jayway.com/2015/04/13/600k-concurrent-websocket-connections-on-aws-using-node-js/
我使用 --expose-gc 标志运行服务器,但似乎不起作用(每 30 秒我强制垃圾收集器 global.gc),有什么猜测吗?
最佳答案
nodejs GC 大多是惰性的,会消耗内存直到达到 1.4Gb 的限制。在重负载应用程序中,通常会看到 Node 进程上升到约 1.4Gb,然后回落到 200Mb 的模式。
GC 是惰性的,因为它是同步的(阻塞循环、停止整个进程、糟糕的事情......)。
它是可配置的*,这里使用 --max-old-space-size
800Mb。
node --max-old-space-size=800 app.js
为了减少(或增加)此限制。
--max-old-space-size
实际上配置的是node最大的内存空间,默认是1400左右,并不是说GC的。但是当旧的空间大小达到极限时,就会触发完整GC。
关于node.js - Nodejs Websocket内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35049442/