Używamy MongoDB od kilku tygodni, ogólny trend, który widzieliśmy, był taki, że mongodb zużywa zbyt dużo pamięci (znacznie więcej niż cały rozmiar zestawu danych + indeksy).
Przeczytałem już to pytanie i to pytanie , ale wydaje się, że żadne nie odnosi się do problemu, z którym się spotkałem, w rzeczywistości wyjaśniają to, co zostało już wyjaśnione w dokumentacji.
Poniżej przedstawiono wyniki poleceń htop i show dbs .
Wiem, że mongodb używa IO odwzorowanego w pamięci, więc w zasadzie system operacyjny obsługuje buforowanie rzeczy w pamięci, a mongodb teoretycznie powinien zwolnić swoją pamięć podręczną, gdy inny proces żąda wolnej pamięci , ale z tego, co widzieliśmy, tak nie jest.
OOM zaczyna zabijać inne ważne procesy, np. Postgres, redis itp. (Jak widać, aby rozwiązać ten problem, zwiększyliśmy pamięć RAM do 183 GB, co teraz działa, ale jest dość drogie. Mongo używa ~ 87 GB pamięci RAM, prawie czterokrotnie większy niż cały zestaw danych)
Więc,
- Czy tak duże zużycie pamięci jest naprawdę oczekiwane i normalne? (Zgodnie z dokumentacją WiredTiger zużywa maksymalnie ~ 60% pamięci RAM na swoją pamięć podręczną, ale biorąc pod uwagę rozmiar zestawu danych, czy ma nawet wystarczającą ilość danych, aby móc zabrać 86 GB pamięci RAM?)
- Nawet jeśli spodziewane jest użycie pamięci, dlaczego Mongo nie zwolni przydzielonej pamięci, jeśli inny proces zacznie żądać więcej pamięci? Różne inne działające procesy były ciągle zabijane przez linux oom, w tym sam mongodb, zanim zwiększyliśmy pamięć RAM i spowodowało to, że system był całkowicie niestabilny.
Dzięki !