Du skapar en instans av Mongo-klassen för varje enskild operation. Det kommer inte att fungera eftersom varje instans kommer att skapa och hålla minst en anslutning (men som standard, 10) och dessa anslutningar kommer bara att tas bort om Java GC rensar upp din Mongo-instans eller när du anropar close().
Problemet är att i båda fallen skapar du dem snabbare än att de stängs även om du använder en enda tråd. Detta kommer att förbruka det maximala antalet anslutningar i en hast. Den rätta lösningen är att ha kvar en Mongo-instans med hjälp av singleton-mönstret (Mongo.Holder tillhandahåller funktionalitet för detta, prova Mongo.Holder.connect(..)). En snabb "fix" är att öka filbeskrivningsgränsen på din maskin så att det maximala antalet anslutningar är avsevärt högre men uppenbarligen kan du så småningom nå samma gräns. Du kan kontrollera ditt nuvarande max med (i skalet) :
db.serverStatus().connections
TL;DR :Behandla en Mongo-instans som en singel och gör dem så långlivade som möjligt och du är gyllene. Att implementera en MongoFactory med en statisk metod getInstance() som returnerar en lätt skapad instans kommer att göra susen bra. Lycka till.