MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mongo apre troppe connessioni

Stai creando un'istanza della classe Mongo per ogni singola operazione. Ciò non funzionerà poiché ogni istanza creerà e manterrà almeno una connessione (ma per impostazione predefinita, 10) e tali connessioni verranno rimosse solo se Java GC pulisce la tua istanza Mongo o quando invochi close().

Il problema è che in entrambi i casi li stai creando più velocemente di quanto vengano chiusi anche usando un singolo thread. Ciò esaurirà in fretta il numero massimo di connessioni. La soluzione giusta è mantenere un'istanza Mongo in giro usando il pattern singleton (Mongo.Holder fornisce funzionalità per questo, prova Mongo.Holder.connect(..)). Una rapida "correzione" consiste nell'aumentare il limite del descrittore di file sulla tua macchina in modo che la quantità massima di connessioni sia considerevolmente più alta, ma ovviamente alla fine potresti raggiungere lo stesso limite. Puoi controllare il tuo massimo attuale usando (in shell) :

db.serverStatus().connections

TL; DR :Tratta un'istanza Mongo come un singleton e rendili il più longevi possibile e sei d'oro. L'implementazione di una MongoFactory con un metodo statico getInstance() che restituisce un'istanza creata pigramente farà il trucco. Buona fortuna.