【发布时间】:2017-05-04 08:38:01
【问题描述】:
我有一个 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 调用。
每当我使用db.getConnection()pool._allConnections.length 的连接时,我都会记录池属性逐渐增加到最大限制(在我的情况下为 100),然后应用程序将挂起任何使用 mysql 连接返回 502 Bad Gateway error 的 API 调用. db.getConnection() 之后甚至不会抛出任何错误。
MySql @@global.wait_timeout 设置为 300。
我在同一个应用程序中也使用了套接字和 redis,即使 mysql API 停止响应,它们也能继续正常工作。
任何人都可以分享对此的任何见解。提前致谢。
【问题讨论】:
标签: mysql node.js connection-pooling pool node-mysql