【问题标题】:Node.js + Socket.io memory leak and max listenerNode.js + Socket.io 内存泄漏和最大监听器
【发布时间】:2013-04-09 23:59:01
【问题描述】:

我是 node.js 初学者。尝试创建简单的聊天应用程序,但有问题。当页面快速刷新 10 次以上时,我有警告:

(node) 警告:检测到可能的 EventEmitter 内存泄漏。增加了 11 位听众。使用emitter.setMaxListeners() 增加限制。

当我禁用 socket.io 时,此警告消失。所以,socket.io 有问题。如何增加 socket.io 的最大侦听器?或者也许是另一种解决方案?

代码:

var http = require('http')
fs = require('fs');

var server = http.createServer(function(req, response) {
    req.setMaxListeners(0);
    var pathname = __dirname + '/index.html'

    fs.readFile(pathname, "binary", function(err, file) {
        if (err) {
            response.writeHead(500, {'Content-Type': 'text/plain'});
            response.end(err);
        } else {
            response.writeHead(200, {'Content-Type': 'text/html'});
            response.write(file, "binary");
            response.end();
       }
    });
});

io = require('socket.io').listen(server);
server.listen(4567);

【问题讨论】:

  • 为什么首先设置maxListener?也许GC会变慢。另外,我不确定 socket.io 在您使用的这种非常不完整的状态下是否可以正常使用。
  • 我这里只是举个小例子。我将在客户端和服务器上使用 websockets。但现在我必须解决内存问题。

标签: node.js socket.io


【解决方案1】:

我无法重现该问题,但试试这个:

io.setMaxListeners(0);

【讨论】:

  • 已经试过了。还尝试了 io.sockets.setMaxListeners(0)。不能解决问题。
  • 嗯,它只是一个警告,所以你可以忽略它:)
  • 是的,但同时我看到内存使用量大幅增加。高达 60-80%,但没有 socket.io - 只有 1-2%。
  • 您问题中的代码是否正是您正在测试的代码?
  • 当然。当我多次快速刷新页面时,就会出现问题。我认为不应该。
【解决方案2】:

在代码顶部尝试此操作以全局增加发射器限制

require('events').EventEmitter.prototype._maxListeners = 100;

【讨论】:

    猜你喜欢
    • 2013-02-25
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    • 2012-03-07
    • 2014-08-13
    • 1970-01-01
    • 2010-12-25
    相关资源
    最近更新 更多