0

これは私が使用しているリクエストの例です:

app.get('/', function (req, res) {
     var user_hash = req.cookies.SESSION;

    db.connect(mongoURI, function (err, db) {
        var collection = db.collection('sessions');

        collection.findOne({hash: user_hash}, function (err, item) {
            res.render('index', {title: 'Домашняя страница', session: item !== null});
            db.close();
        });
    });
});

そして、私はそのように処理される多くの要求を持っています。

次のコマンドで Apache Benchmark を実行すると、問題が発生します。

ab -n 100 -c100 http://127.0.0.1:8080

次のエラーが表示されます。

cannon read property collection of null

私の推測では、apache ベンチマークの後、mongodb で開かれた接続は 130 ~ 150 です。現在、サーバーを「バトル」に突入させる前に、より安定させようとしています。接続プールについて聞いたことがありますが、わかりません。

ここでの質問:「mongodb で開かれている多くの接続に対して」またはその他の理由で、サーバーがクラッシュしますか? 修正するにはどうすればよいですか?

4

1 に答える 1

1

リソースが OS に返されるまでに時間がかかるため、バックエンド データベースへの接続を継続的に開いたり閉じたりすることはお勧めできません。おそらく、エラーが表示される理由を説明しています。

hereで説明されているように、mongod または mongos の ulimit を増やすことができますが、実行しようとしているテストの種類を考えると、それでもリソースが不足すると思います。

おそらく、マングースやここで説明されているアプローチのようなものを使用する方が理にかなっています。

しかし、現在のアプローチに本当に従いたい場合は、高速アプリケーションをラップする必要があります。

Db.connect(mongoURI,function(err, db){
  if(err) {
    console.log("Error " , err);
    return;
  }
  var collection = db.collection('sessions');

  app.get('/', function (req, res) {
    var user_hash = req.cookies.SESSION;
    collection.findOne({hash: user_hash}, function (err, item) {
        res.render('index', {title: 'Домашняя страница', session: item !== null});
    });
  });

});
于 2013-05-28T12:04:36.303 に答える