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