我有一个node-mysql应用程序,mysql-pool设置为:
var db = db.createPool({
host : (process.env.NODE_ENV == "development") ? config.db.dev.host : config.db.prod.host,
user : (process.env.NODE_ENV == "development") ? config.db.dev.uname : config.db.prod.uname,
password : (process.env.NODE_ENV == "development") ? config.db.dev.passwd : config.db.prod.passwd,
database : (process.env.NODE_ENV == "development") ? config.db.dev.dbname : config.db.prod.dbname,
port : (process.env.NODE_ENV == "development") ? config.db.dev.port : config.db.prod.port,
connectionLimit : 100,
multipleStatements : true,
acquireTimeout : 10000,
});经过几天的活动后,我的应用程序开始积累陈旧的连接,我使用以下命令检查了mysql中不存在threadId
show processlist我在每个查询完成执行后使用connection.release()。我每天会收到大约50000个API调用。
每当我使用mysql连接时,我记录了池的属性,pool._allConnections.length逐渐增加,直到最大限制(在我的情况下是100),然后应用程序将挂起任何使用mysql连接的API调用,返回502 Bad Gateway error。在此之后,db.getConnection()甚至不会抛出任何错误。
MySql @@global.wait_timeout设置为300。
我在同一个应用程序中也使用了套接字和redis,即使在mysql API停止响应后,它们仍然可以正常工作。
有人能分享一下这方面的见解吗?提前谢谢。
https://stackoverflow.com/questions/41220132
复制相似问题