sql >> Database >  >> NoSQL >> MongoDB

Mongo opent te veel verbindingen

U maakt voor elke afzonderlijke bewerking een instantie van de Mongo-klasse. Dat werkt niet, aangezien elke instantie ten minste één verbinding maakt en vasthoudt (maar standaard 10) en die verbindingen alleen worden verwijderd als de Java GC uw Mongo-instantie opschoont of wanneer u close() aanroept.

Het probleem is dat je ze in beide gevallen sneller maakt dan dat ze worden gesloten, zelfs als je een enkele thread gebruikt. Dit zal het maximale aantal verbindingen in een haast uitputten. De juiste oplossing is om één Mongo-instantie in de buurt te houden met het singleton-patroon (Mongo.Holder biedt hiervoor functionaliteit, probeer Mongo.Holder.connect(..)). Een snelle "oplossing" is om de bestandsdescriptorlimiet op uw machine te verhogen, zodat het maximale aantal verbindingen aanzienlijk hoger is, maar het is duidelijk dat u uiteindelijk dezelfde limiet kunt bereiken. U kunt uw huidige max controleren met (in shell):

db.serverStatus().connections

TL;DR:Behandel een Mongo-instantie als een singleton en maak ze zo lang mogelijk en je bent goud waard. Het implementeren van een MongoFactory met een statische methode getInstance() die een lui gemaakte instantie retourneert, zal prima werken. Veel succes.



  1. MongoDB/JS - Geavanceerd zoeken met facetten - Alleen relevante categorieën/waarden krijgen

  2. Vraag mongodb om documenten terug te sturen die vandaag zijn gemaakt

  3. Kan eigenschap 'gebruiker' van 'undefined' of 'null' niet destructureren

  4. Waarom moet ik Redis-verbindingen sluiten of open houden?