npm mysql内存泄露

摘要:在node端使用mysql线程池的时候,发现网站越访问越慢最后干脆访问不了了,通过压力测试观察内存变化,结果发现以下代码存在内存泄露,数据库连接无法释放代码如下:

在node端使用mysql线程池的时候,发现网站越访问越慢最后干脆访问不了了,通过压力测试观察内存变化,结果发现以下代码存在内存泄露,数据库连接无法释放代码如下:

var mysql = require('mysql');
var pool = mysql.createPool({
    queueLimit:8,
    host: 'localhost',
    user: 'xxx',
    password: '***',
    database:'xxx',
    port: 3306
});
function connect() {
    return {
        pool: pool,
        query: function(sql, callback) {
            pool.getConnection(function(err,conn){
                if(err){
                    callback(err,null,null);
                } else {
                    conn.query(sql,function(qerr,vals,fields) {
                        //事件驱动回调
                        callback(qerr,vals,fields);
                        //释放连接
                        conn.release();
                    });
                }
            });
        }
    }
}

最后通过修改如下,再次模拟高并发发现内存可以快速回收

// 连接数据库
function connect () {
    var db = mysql.createConnection({
        host: 'localhost',
        user: 'xxx',
        password: '***',
        database:'xxx',
        port: 3306
    });
    db.connect(function(err) {
        if(err) {
            db.end();
        }
    });
    return {
        query: function(sql, callback) {
            db.query(sql,function(qerr,vals,fields) {
                    //事件驱动回调
                    callback(qerr,vals,fields);
                    //释放连接
                    db.end();
            });
        }
    }
}

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://shenqiku.cn/article/FLY_10888