写了一个用于操作mariadb的工具包,但是在但是在执行完操作后使用conn.end()
或conn.release()
或conn.destroy()
都无法关闭数据库连接,用show full processlist
查的话就会有一堆sleep状态的进程,随着操作越来越多,sleep进程也就越来越多,到最后就会too many connection,刚开始以为是设置的自动关闭连接的时间太长了,然后我就给设置成10秒了,然后我再用show full processlist
查看时就会出现原本的进程在十秒后确实消失了,但是又会冒出来同样数量的进程,并且新进程的host都是新的,然后时间又开始从0计算,很奇怪。
代码:
const mariaDB = require('mariadb')
const dbConfig = require('./db.config')
class dbConnect {
constructor(){
this.pool = mariaDB.createPool(dbConfig)
}
async query(param) {
const pool = this.pool
// 用param组织SQL
try {
conn = await pool.getConnection()
data = await conn.query(sql)
} catch (err) {
console.log(err)
throw err
} finally {
if (conn) {
conn.release()
conn.end()
conn.destroy()
}
return data
}
}
// ...
}
进程列表:
因为看不到你是如何使用
dbConnect
的,但是根据你的描述,猜测你每次进行查询的时候都是new一个dbConnect
,如果是这样的话,则每次都会新建一个连接池,这样肯定就会连接爆炸了。先确定dbConnect
是不是单例吧