MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Mongo abre muitas conexões


Você está criando uma instância da classe Mongo para cada operação individual. Isso não funcionará, pois cada instância criará e manterá pelo menos uma conexão (mas, por padrão, 10) e essas conexões serão removidas apenas se o Java GC limpar sua instância do Mongo ou quando você invocar close().

O problema é que em ambos os casos você está criando eles mais rápido do que eles estão sendo fechados mesmo usando um único thread. Isso esgotará a quantidade máxima de conexões rapidamente. A correção certa é manter uma instância do Mongo usando o padrão singleton (Mongo.Holder fornece funcionalidade para isso, tente Mongo.Holder.connect(..)). Uma "correção" rápida é aumentar o limite do descritor de arquivo em sua máquina para que a quantidade máxima de conexões seja consideravelmente maior, mas obviamente você pode atingir o mesmo limite. Você pode verificar seu máximo atual usando (no shell):
db.serverStatus().connections

TL;DR :Trate uma instância do Mongo como um singleton e torne-a o mais longeva possível e você é ouro. Implementar um MongoFactory com um método estático getInstance() que retorna uma instância criada preguiçosamente fará o truque muito bem. Boa sorte.