我们的nodejs应用程序连接到mongos实例,而这些实例连接到mongod实例。
我们随机从应用程序中获取超时,并显示以下错误
connection 10 to <IP of mongos>:27017 timed out
我们的应用程序的池大小为20。
这些超时主要是峰值,并且存在1-2秒,然后确保正常。
超时仅在单个实例上发生,并且不会扩展。但是它们发生在不同时间的不同实例上。
如何进一步调试此问题?
mongos实例上的日志没有任何与断开连接有关的消息
答案 0 :(得分:0)
您的某些查询需要很长时间。您可以通过使用connectTimeoutMS,reconnectTries传递选项来避免超时
var uri = 'mongodb://USENAME:PASSWORD@host1:port1,host2:port2/database?authSource=admin';
var options = {};
options.server = {
auto_reconnect: true,
poolSize: 5,
socketOptions: { keepAlive: 1, connectTimeoutMS: 30000 },
reconnectTries: 3000
};
options.replset = { //For Replica set
auto_reconnect: true,
poolSize: 5,
socketOptions: { keepAlive: 1, connectTimeoutMS: 30000 },
reconnectTries: 3000
};
var db = mongoose.createConnection(uri, options);
mongoose.connection.on('error', function(err) {
console.log('MONGODB ERROR MONGOOSE LEVEL ' + server, err);
});
db.on('connecting', function() {
console.info('MONGODB ' + server + ' connecting.');
});
db.on('error', function(err) {
console.log('MONGODB ERROR ' + server, err);
});
db.on('close', function(err) {
console.log('MONGODB CLOSE ' + server, err);
});
db.on('connected', function() {
console.log('MONGODB ' + server + ' connected successfully.');
});
db.once('open', function callback() {
console.log('MONGODB ' + server + ' opened successfully.');
});
db.on('reconnected', function() {
console.log('MONGODB ' + server + ' reconnected.');
});
db.on('timeout', function() {
console.log('MONGODB ' + server + ' timeout.');
});
db.on('disconnected', function() {
console.log('MONGODB ' + server + ' disconnected');
});