Node-mysql陈旧连接

时间:2016-12-19 10:07:57

标签: mysql node.js connection-pooling pool node-mysql

我有一个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.length502 Bad Gateway error之后甚至不会抛出任何错误。

MySql db.getConnection()设置为300。

我有套接字和redis也在同一个应用程序中使用,即使在mysql API停止响应后它们仍能正常工作。

任何人都可以对此分享任何见解。提前谢谢。

1 个答案:

答案 0 :(得分:0)

在这种情况下,您应该增加mysql池的连接限制。您一次与mysql的活动连接正在超过您的连接限制,并且您的请求将在mysql池分配连接之前过期。您也可以尝试增加超时限制。