Prawdziwym powodem, dla którego nie możesz zrobić tego, o co prosisz (ograniczenie pamięci), jest to, że MongoDB nie zarządza pamięcią, której używa bezpośrednio - pozwala to systemowi operacyjnemu. MongoDB po prostu mapuje wszystkie swoje dane, a następnie w razie potrzeby wyświetla stronę OS w pamięci. W rezultacie nie ma bezpośredniego zarządzania wykorzystaną kwotą, dopóki MongoDB nie zaimplementuje tego w zupełnie inny sposób, lub system operacyjny na to pozwoli (nie jest to możliwe w Linuksie od 2.4 dni).
Jedynym obecnie sposobem na prawdziwą segregację zasobów jest zastosowanie rozwiązania do wirtualizacji i izolacja MongoDB na własnej maszynie wirtualnej. Tak, w grę wchodzą koszty ogólne (choć hiperwizory stały się znacznie lepsze), ale w tej chwili jest to cena, jaką należy zapłacić za ten poziom kontroli zasobów.
Jeśli chodzi o OOM Killer, nawet bez żadnych innych procesów na hoście, dopóki zestaw danych i indeksy ogólnie przekraczają dostępną pamięć, MongoDB może trafić w problemy z OOM Killer. Wynika to z tego, w jaki sposób dane są stronicowane z pamięci - jeśli nie ma presji pamięci (nic innego nie chce pamięci rezydentnej), a ty ciągle dodajesz / dotykasz nowych danych i indeksów, w końcu wzrośnie, aby zużyć całą dostępną pamięć RAM. Stąd zalecenie, aby zawsze konfigurować wymianę podczas uruchamiania MongoDB:
https://docs.mongodb.com/manual/administration/production-notes/#swap
Oczywiście dane LRU zostaną najpierw stronicowane, inne procesy mogą również zająć pamięć res, ale koncepcja nadal obowiązuje, chyba że załadujesz zestaw danych do pamięci, a następnie pozostanie on statyczny. Najlepszą rzeczą do zrobienia, jeśli martwisz się, jest wprowadzenie go do wiadomości MMS i śledzenie zużycia w czasie:
http://mms.mongodb.com
Aktualizacja: sierpień 2015 r
Od czasu, gdy napisałem tę odpowiedź, sytuacja trochę się zmieniła, a informacje są nieco nieaktualne. Na przykład Linux ma teraz grupy cg i pokrewne technologie ( na przykład kontenery Docker ), które osiągnęły dojrzałość do tego stopnia, że pozwalają lepiej izolować i ograniczać zasoby (w tym pamięć ) zużywane przez dowolny proces w środowisku produkcyjnym, nawet takim, który używa mapowanie pamięci jak MongoDB.
Ponadto wraz z pojawieniem się nowych silników pamięci masowej poza MMAP, takich jak WiredTiger w MongoDB 3.0+, możesz użyć wbudowanych funkcji, aby ograniczyć rozmiar pamięci podręcznej dla MongoDB. Dlatego wymagania dotyczące pamięci RAM naprawdę zależą teraz od tego, jak zdecydujesz się skonfigurować MongoDB, w jakim środowisku go uruchomisz i jaki silnik pamięci wybierzesz.