【发布时间】:2017-10-23 23:10:21
【问题描述】:
我正在运行一个脚本,它可以在我拥有的数据库中查找数据。一段时间后由于某种原因,它会停止查找任何数据,但不会将任何错误输出到屏幕或通过 node.js。这是我为猫鼬设置的以下设置。顺便说一句,我在 MLAB 有一个数据库!
var connectionOptions = {
server: {
auto_reconnect: true,
poolSize: 16,
socketOptions: {
keepAlive: 120,
connectTimeoutMS: 5 * 60 * 60 * 1000,
socketTimeoutMS: 5 * 60 * 1000
}
},
replset: {
poolSize: 16,
socketOptions: {
connectTimeoutMS: 300000, // 5 minutes
keepAlive: 120
},
ha: true, // Make sure the high availability checks are on
haInterval: 5000, // Run every 10 seconds
}
};
//mongoose.set('debug', true);
mongoose.connect('mongodb://XXXXXXXXXXXX@XXXXXX.mlab.com:57328,XXXXXXXX.mlab.com:57328/XXXXXXXXX?replicaSet=rs-XXXXXX', connectionOptions, function (err) {
if (err) console.log(err);
});
mongoose.connection.on('connecting', function () {
console.log('Connecting to MongoDB...');
});
mongoose.connection.on('connected', function () {
console.log('MongoDB connected!');
});
mongoose.connection.on('open', function () {
console.log('MongoDB connection opened!');
});
mongoose.connection.on('error', function (err) {
console.log(err);
mongoose.disconnect();
});
mongoose.connection.on('disconnected', function () {
console.log('MongoDB disconnected!');
mongoose.connect('mongodb://XXXXXXXXXXXX@XXXXXX.mlab.com:57328,XXXXXXXX.mlab.com:57328/XXXXXXXXX?replicaSet=rs-XXXXXX', connectionOptions, function (err) {
if (err) console.log(err);
});
});
mongoose.connection.on('reconnected', function () {
console.log('MongoDB reconnected!');
});
mongoose.connection.on('close', function () {
console.log.error('MongoDB closed');
});
mongoose.connection.on('ha', function(type, data) {
console.log('replset ha ' + type);
});
mongoose.connection.on('timeout', function () {
console.log.error('MongoDB timeout');
});
我见过很多配置,我尝试了很多不同的东西,但似乎没有任何效果。
我非常感谢您的帮助,因为我一直在研究,但没有运气。
再次回顾一下,我有一个脚本正在运行从数据库中查询记录,一段时间后,该脚本将继续运行,但似乎找不到任何新记录并停止响应任何新数据。
【问题讨论】:
-
我遇到了同样的问题,但仍然找不到解决方法。我有一个 linux CRON 调用一个端点,该端点每 15 分钟在 Mongo 中搜索数据。几个小时后,即使我可以在 shell 上手动执行该查询并获得结果,它也会停止返回数据。我已经快疯了。
-
所以这种情况只发生在 cron 或者当你正常运行脚本时?
-
它只发生在我的节点 API 中,目前正在使用 MongoDB 节点 JS 驱动程序。 cron 不断从这个 API 调用端点。几个小时后它停止工作,但我仍然可以将查询复制到 mongoDB shell,它会返回我所期望的。一旦我重新启动我的 API,端点就会再次开始工作,直到几个小时后问题再次发生。更多细节在这里:groups.google.com/forum/#!topic/mongodb-user/LkJV0ARHbV8
-
你部署到heroku还是什么的?这是否与冷启动问题有关,即它没有响应实际上是服务器动态旋转?
-
部署在 AWS EC2 上。就像上面链接中解释的那样,除了从我的聚合调用中获取数据之外,一切都很好。在服务器正常运行几个小时后,相同的查询不会返回任何内容,但是当复制到 Mongo shell 时,它会返回我期望的所有内容。如果我重新启动服务器,查询会再次运行,但几个小时后问题再次出现。
标签: node.js mongodb mongoose mlab