MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongo öffnet zu viele Verbindungen

Sie erstellen für jede einzelne Operation eine Instanz der Mongo-Klasse. Das wird nicht funktionieren, da jede Instanz mindestens eine Verbindung erstellt und hält (aber standardmäßig 10) und diese Verbindungen nur entfernt werden, wenn der Java GC Ihre Mongo-Instanz bereinigt oder wenn Sie close() aufrufen.

Das Problem ist, dass Sie sie in beiden Fällen schneller erstellen, als sie geschlossen werden, selbst wenn Sie einen einzigen Thread verwenden. Dadurch wird die maximale Anzahl an Verbindungen in Eile ausgeschöpft. Die richtige Lösung besteht darin, eine Mongo-Instanz mit dem Singleton-Muster beizubehalten (Mongo.Holder bietet hierfür Funktionen, versuchen Sie es mit Mongo.Holder.connect(..)). Eine schnelle "Lösung" besteht darin, das Dateideskriptorlimit auf Ihrem Computer zu erhöhen, sodass die maximale Anzahl von Verbindungen erheblich höher ist, aber offensichtlich könnten Sie schließlich dasselbe Limit erreichen. Sie können Ihr aktuelles Maximum mit (in der Shell) :

überprüfen
db.serverStatus().connections

TL;DR:Behandeln Sie eine Mongo-Instanz als Singleton und machen Sie sie so langlebig wie möglich, und Sie sind goldrichtig. Das Implementieren einer MongoFactory mit einer statischen Methode getInstance(), die eine faul erstellte Instanz zurückgibt, wird den Zweck erfüllen. Viel Glück.