【问题标题】:Possible EventEmitter memory leak detected without EventEmiter在没有 EventEmitter 的情况下检测到可能的 EventEmitter 内存泄漏
【发布时间】:2017-05-08 00:40:26
【问题描述】:

我已经尝试了很长时间自己解决这个问题,但找不到适合我的问题的解决方案。

我有这个方法:

handle_database = function(callback, req, res) {

pool.getConnection(function(err,connection){
    if (err) {
        res.json({"code" : 100, "status" : "Error in connection database"});
        return;
    }

    connection.query("select * from `atable`",function(err,rows){
        connection.release();
        if(!err) {
            callback(rows);
        }
    });

    connection.on('error', function(err) {
        res.json({"code" : 100, "status" : "Error in connection database"});
        return;
    });
});
}

这个方法在我的routes.js中是这样使用的:

router.get('/', function(req, res){
    db.getUsers(function (data) {
        res.render('pages/index',{users: data, title: 'title'});
    }, req, res);

});

当我连续刷新此页面 11 次时,我收到以下警告:

(node:11780) 警告:检测到可能的 EventEmitter 内存泄漏。添加了 11 个错误侦听器。使用emitter.setMaxListeners() 增加限制

但我找不到如何解决这个问题,或者只是将限制设置为 0 是一个聪明的想法?

【问题讨论】:

  • 你用什么来连接数据库和管理池?
  • var pool = mysql.createPool({ connectionLimit : 10, host : 'localhost', user : 'root', password : 'pw', database : 'db', debug: false, });
  • 那是什么插件? node中有几十个库可以访问数据库。你用 mysqljs/mysql 吗?
  • 我使用的插件是:Mysql 2.12.0

标签: javascript node.js memory-leaks database-connection


【解决方案1】:

您不应该在每次要发出查询时在连接上添加错误处理程序。连接是池化的,你不会每次都得到一个新的。在您的情况下,它是一个大小为 10 的池,并且您在第十一次调用时重用了一个连接,这就是触发警告的时候。

只检查错误

  • pool.getConnection
  • connection.query

它的外观如下:

handle_database = function(callback, req, res) {
    pool.getConnection(function(err,connection){
        if (err) {
            res.json({"code" : 100, "status" : "Error in connection database"});
            return;
        }

        connection.query("select * from `atable`",function(err,rows){
            connection.release();
            if(err) {
                res.json({"code" : whatever, "status" : "Error in querying database"});
                return;
            }
            callback(rows);

        });
    });
}

【讨论】:

    猜你喜欢
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 2020-02-27
    • 2021-09-05
    相关资源
    最近更新 更多