node.js - Nodejs Websocket内存泄漏

标签 node.js memory-leaks websocket socket.io garbage-collection

我正在使用带有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/

相关文章:

javascript - 找不到模块 'babel-runtime/regenerator' 本地导入与从 NPM 导入

c - 是什么导致了这个 C 内存泄漏? (退出并出现错误 137)

python - 如何在不使用任何库的情况下使用 Python 实现一个简单的 Web 服务器?

sockets - 打开服务器或在网络上使用套接字的 Electron 应用程序

node.js - 复制 node_modules 是否安全?

javascript - 使用 multer 上传多个文件?

javascript - 使用 Electron JS 打印 PDF 文件

android - 数据绑定(bind)内存泄漏

c++ - 使用 boost::archive::binary_iarchive 的内存泄漏

javascript - HTML5 websockets 与可访问性标准的兼容性如何?