MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Mongo ouvre trop de connexions

Vous créez une instance de la classe Mongo pour chaque opération individuelle. Cela ne fonctionnera pas car chaque instance créera et maintiendra au moins une connexion (mais par défaut, 10) et ces connexions ne seront supprimées que si Java GC nettoie votre instance Mongo ou lorsque vous appelez close().

Le problème est que dans les deux cas, vous les créez plus rapidement qu'ils ne sont fermés, même en utilisant un seul thread. Cela épuisera le maximum de connexions à la hâte. La bonne solution consiste à conserver une instance Mongo en utilisant le modèle singleton (Mongo.Holder fournit des fonctionnalités pour cela, essayez Mongo.Holder.connect(..)). Une "solution" rapide consiste à augmenter la limite de descripteur de fichier sur votre machine afin que le nombre maximum de connexions soit considérablement plus élevé, mais vous pourriez évidemment atteindre la même limite. Vous pouvez vérifier votre maximum actuel en utilisant (en shell) :

db.serverStatus().connections

TL;DR :Traitez une instance de Mongo comme un singleton et rendez-la aussi longue que possible et vous êtes en or. L'implémentation d'un MongoFactory avec une méthode statique getInstance() qui renvoie une instance créée paresseusement fera très bien l'affaire. Bonne chance.