. NodeJS Sunucu kilitleniyor aynı anda yapılabilecek istekleri
/göstermek Ben bir rotası vardır ve MongoDB bağlanır ve veri getirir küçük POC'ye aşağıdaki yerleşik sorunu yeniden oluşturmak için. LoadUIweb kullanarak yaklaşık 500 eşzamanlı istek oluşturduğumda, koleksiyonun “findone” fonksiyonu bazen geri dönmez.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” koleksiyonunun yaklaşık 100 belgesi vardır. sunucu kilitleniyor, bu “İsteği Got” yazdırır ve “Yanıt var” ama asla baskılar “Yanıtı Ardışık” ve “Yanıtı döndü”
. Yeni isteğini kabul ettiğinden, Nodes sunucusunun kendisinin asıldığını görünmüyor. MongoDB'nin sonucunun asla geri dönmediği anlaşılıyor. MongoDB'deki son yürütülen sorguları kontrol ettiğimde, sorgunun MongoDB'ye ulaşmadığı anlaşılıyor. kullanıyorum şu sürümleri:MongoDB: 3.2.3,
Düğümler: 5.2.0,
MongoDB sürücüsü: 2.1.7
Has Bu sorunla daha önce karşılaşmış olan var mı? MongoDB ya da Düğümler için nedenleri izlemek için mevcut araçlar nelerdir? Buradaki suçlu kim? MongoDB mi yoksa Düğümün MongoDB yerel sürücüsü mi? Başka bu sadece örtmek kimseyi Gönderme
Sen açık bağlantıları kapatma değil, böylece db bellek sızıntısı sunuyoruz. Bulma tamamlandığında (bir geri arama veya söz kullanın - bu async - use 'conn.close()' –
@ sterling-archer: Bağlantı havuzunu kullandığınızda (veritabanı nesnesini yeniden kullanmanız) bağlantıyı yalnızca uygulama bittiğinde kapatmalıyım, doğru mu, yoksa burada bir şey mi özlüyorum? – Amey
@Amey Bu doğru. Kodunuzda herhangi bir sorun göremiyorum. Geri çağırma: Hatalarınızı görmezden gelmeniz gereken bir hata olabilir. – JohnnyHK