【发布时间】:2019-11-14 17:26:15
【问题描述】:
由于随机连接超时,我的 node.js 应用程序给出 5xx。以下是我的连接和查询方式:
var mysql = require('mysql');
var config = {
host: '172.10.1.1',
port: 3306,
user: 'user',
password: 'pwd',
database: 'mydb',
connectionLimit: 15,
queueLimit: 30
}
var poolCluster = mysql.createPool(config);
var queryDB = function(query, cb) {
poolCluster.getConnection(function(err, connection) {
if(err) {
cb(err, null);
}
else {
connection.query(query, function (err, rows) {
connection.release();
cb(err, rows);
});
}
});
};
另外,在另一个替代版本中,禁用了连接池,代码如下所示:
queryDB = function(query, cb) {
var connection = mysql.createConnection(config);
connection.query(query, function(err, rows) {
connection.end();
cb(err, rows);
});
};
但是这两种设置都给出了 错误:连接 ETIMEDOUT 在 Connection._handleConnectTimeout
可以在这里看到与我当前设置类似的项目:https://github.com/hay-wire/NodeBootstrap/blob/master/models/UsersUtils.js
如果您能指出连接可能出现的问题,那就太好了。谢谢。
更新
由于 node.js 服务在集群模式下运行,我认为可能是跨线程从共享连接池获取 mysql 连接资源的竞争条件是原因。所以我将集群模式关闭为单线程模式,连接超时停止。
我仍然不相信这是导致此问题的竞争条件。有什么方法可以验证吗?
【问题讨论】:
-
每个查询平均需要多长时间?
-
@schtever:时间非常少..大约几毫秒
-
你好,我也有类似的问题,是不是也跟CPU增加问题有关?
标签: javascript mysql node.js amazon-rds node-mysql