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();
});
}
}
}本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!