MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Mongo otwiera zbyt wiele połączeń

Tworzysz instancję klasy Mongo dla każdej pojedynczej operacji. To nie zadziała, ponieważ każda instancja utworzy i utrzyma co najmniej jedno połączenie (ale domyślnie 10), a te połączenia zostaną usunięte tylko wtedy, gdy Java GC wyczyści twoją instancję Mongo lub gdy wywołasz close().

Problem polega na tym, że w obu przypadkach tworzysz je szybciej niż są zamykane nawet przy użyciu jednego wątku. To wyczerpie maksymalną liczbę połączeń w pośpiechu. Właściwym rozwiązaniem jest zachowanie jednej instancji Mongo przy użyciu wzorca singleton (Mongo.Holder zapewnia w tym celu funkcjonalność, wypróbuj Mongo.Holder.connect(..)). Szybkim "rozwiązaniem" jest zwiększenie limitu deskryptorów plików na twoim komputerze, tak aby maksymalna liczba połączeń była znacznie wyższa, ale oczywiście w końcu możesz osiągnąć ten sam limit. Możesz sprawdzić swoje aktualne maksimum za pomocą (w powłoce):

db.serverStatus().connections

TL;DR :Traktuj instancję Mongo jako singletona i spraw, by żył jak najdłużej, a będziesz złoty. Implementacja MongoFactory za pomocą statycznej metody getInstance(), która zwraca leniwie utworzoną instancję, załatwi sprawę. Powodzenia.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Wyszukiwanie ciągu znaków ze znakami specjalnymi w dokumencie MongoDB

  2. Błąd podczas łączenia z klastrem Atlas Free (MongoDB)

  3. MongoDB - Przechowywanie daty bez strefy czasowej

  4. MongoDB Powolne zapytanie według identyfikatora

  5. Nie można zaktualizować danych w mongodb