我的NodeJS应用程序在200个或更多用户同时访问时挂起MongoDB的“查找”查询。
演示/重现我在小POC之后构建的问题,该POC有一条路由,它连接到MongoDB并获取数据。当我使用LoadUIweb创建大约500个同时请求时,有时,集合的“findone”函数永远不会返回。
var express = require('express');
var mongodb = require('mongodb');
var config = require('../Config/Config');
var logger = require('../Config/LogManager');
var app = express();
var MONGODB_URI = config.PCMMongoDB;
var db;
var coll;
// Initialize connection once
mongodb.MongoClient.connect(MONGODB_URI, function(err, database) {
if(err) throw err;
db = database;
coll = db.collection('FacilitySettings');
app.listen(3000);
console.log('Listening on port 3000');
});
// Reuse database/collection object
app.get('/', function(req, res) {
logger.loggerinfo.info("Got the request");
//var result = new Array();
coll.find({}, function(err, docs) {
logger.loggerinfo.info("Got the Response", err);
docs.each(function(err, doc) {
if(err){
logger.loggerinfo.info("Got the error while iterating", err);
res.end();
}
if(doc) {
logger.loggerinfo.info("Iterated the Response");
res.write(JSON.stringify(doc) + "\n");
//result.push(doc);
}
else {
logger.loggerinfo.info("Returned the Response");
res.end();
}
});
});
});
“FacilitySettings”集合有大约100个文档。
当服务器挂起时,它会打印“获取请求”和“得到响应”但它从不打印“迭代响应”并“返回响应”。似乎Nodes服务器本身没有挂起,因为它接受新请求。似乎从未返回MongoDB的结果。 当我检查MongoDB上最后执行的查询时,似乎查询永远不会到达MongoDB。 我使用以下版本:
MongoDB:3.2.3,
节点:5.2.0,
MongoDB驱动程序:2.1.7
以前有人遇到过这个问题吗?有哪些工具可用于MongoDB或节点,以追踪原因?谁是罪魁祸首?它是MongoDB还是Node的MongoDB本机驱动程序?
答案 0 :(得分:0)
发布此信息只会让其他人遇到同样的问题。
我更新了MongoDB驱动程序(版本2.1.13),问题现在似乎已得到解决。然后我在我使用的版本,2.1.7和2.1.13之间取了一个diif,我发现光标类的变化很少,在排气条件下很明显。我不确定这是否是一个相关的变化,或者还有其他一些已经修复的问题可以解决我的问题。