【问题标题】:Websocket nodejs memory leakWebsocket nodejs内存泄漏
【发布时间】:2016-01-27 22:34:09
【问题描述】:

我将 node v4.2.1 与 socket.io 一起使用(我已经测试了即使 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),有什么猜测吗?

【问题讨论】:

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


    【解决方案1】:

    nodejs GC 主要是惰性的,它会消耗内存直到达到 1.4Gb 的限制。在重负载应用程序中,通常会看到节点进程上升到 ~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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 1970-01-01
      • 2013-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多