2016-03-28 40 views
0
tarihinde MongoDB arasında Sorgu bul eşzamanlı 200 veya daha fazla kullanıcı tarafından erişilen ne zaman NodeJS uygulama MongoDB arasında “Bul” sorguyu asılı

. 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

+0

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()' –

+0

@ 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

+0

@Amey Bu doğru. Kodunuzda herhangi bir sorun göremiyorum. Geri çağırma: Hatalarınızı görmezden gelmeniz gereken bir hata olabilir. – JohnnyHK

cevap

0

aynı konuda rastlar.

I (versiyon 2.1.13) MongoDB sürücüsü güncel ve sorunun artık çözülmüş gibi görünüyor. Sonra, kullandığım sürüm, 2.1.7 ve 2.1.13 arasında bir diif aldım ve imleç sınıfında, egzoz koşulunda farkedilebilecek birkaç değişiklik olduğunu gördüm. Bunun ilgili bir değişiklik olup olmadığından emin değilim ya da davamı çözen başka bir şey var. İşleri bitince