sql >> Base de Datos >  >> NoSQL >> MongoDB

Mongo abre demasiadas conexiones

Está creando una instancia de la clase Mongo para cada operación individual. Eso no funcionará ya que cada instancia creará y mantendrá al menos una conexión (pero de forma predeterminada, 10) y esas conexiones solo se eliminarán si Java GC limpia su instancia de Mongo o cuando invoca close().

El problema es que en ambos casos los está creando más rápido de lo que se están cerrando, incluso usando un solo hilo. Esto agotará la cantidad máxima de conexiones en un apuro. La solución correcta es mantener una instancia de Mongo usando el patrón singleton (Mongo.Holder proporciona funcionalidad para esto, pruebe Mongo.Holder.connect(..)). Una "solución" rápida es aumentar el límite de descriptores de archivo en su máquina para que la cantidad máxima de conexiones sea considerablemente más alta, pero obviamente eventualmente podría alcanzar el mismo límite. Puede verificar su máximo actual usando (en shell):

db.serverStatus().connections

TL; DR:Trate una instancia de Mongo como un singleton y hágala lo más duradera posible y estará dorado. Implementar una MongoFactory con un método estático getInstance() que devuelve una instancia creada con pereza funcionará bien. Buena suerte.