我有一个node-mysql应用程序,mysql-pool设置为:
<!--lot of other content in the page -->
<h1>Example text</h1>
<p >example content.</p><a href="#" onclick="show('example1')"> Read more </a>
<p id="example1" style="display:none; font-weight: bold">more text will appear here.</p>
<script>
function show(ele){
document.getElementById(ele).style.display = 'block';
}
</script>
经过几天的活动后,我的应用程序开始累积过时的连接,我已经检查过了使用
在mysql中不存在的threadId?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,
});
我在每个查询完成执行后使用show processlist
。我每天可以获得50000次API调用。
每当我使用connection.release()
db.getConnection()
使用连接时,我都会记录池属性逐渐增加到最大限制(在我的情况下为100),然后应用程序将挂起以进行任何API调用它使用mysql连接返回pool._allConnections.length
。 502 Bad Gateway error
之后甚至不会抛出任何错误。
MySql db.getConnection()
设置为300。
我有套接字和redis也在同一个应用程序中使用,即使在mysql API停止响应后它们仍能正常工作。
任何人都可以对此分享任何见解。提前谢谢。
答案 0 :(得分:0)
在这种情况下,您应该增加mysql池的连接限制。您一次与mysql的活动连接正在超过您的连接限制,并且您的请求将在mysql池分配连接之前过期。您也可以尝试增加超时限制。