Wir verwenden MongoDB seit einigen Wochen. Der allgemeine Trend, den wir gesehen haben, war, dass Mongodb viel zu viel Speicher belegt (viel mehr als die gesamte Größe seines Datensatzes + der Indizes).
Ich habe diese Frage und diese Frage bereits durchgelesen , aber keine scheint sich mit dem Problem zu befassen, mit dem ich konfrontiert war. Sie erklären tatsächlich, was bereits in der Dokumentation erklärt wurde.
Das Folgende sind die Ergebnisse der Befehle htop und show dbs .
Ich weiß, dass mongodb speicherabgebildete E / A-Vorgänge verwendet, sodass das Betriebssystem im Grunde genommen das Zwischenspeichern von Dingen im Speicher handhabt, und mongodb sollte theoretisch seinen zwischengespeicherten Speicher freigeben, wenn ein anderer Prozess freien Speicher anfordert , was wir jedoch gesehen haben, ist dies nicht der Fall.
OOM startet damit, andere wichtige Prozesse wie Postgres, Redis usw. zu beenden. (Um dieses Problem zu beheben, haben wir den RAM auf 183 GB erhöht, was jetzt funktioniert, aber ziemlich teuer ist. Mongo verwendet ~ 87 GB RAM. fast 4X der Größe seines gesamten Datensatzes)
So,
- Ist so viel Speicherbedarf wirklich zu erwarten und normal? (Laut Dokumentation verwendet WiredTiger höchstens ~ 60% des Arbeitsspeichers für den Cache. Hat der WiredTiger unter Berücksichtigung der Datenmenge überhaupt genug Daten, um 86 GB RAM aufnehmen zu können?)
- Auch wenn die Speichernutzung erwartet wird, warum lässt mongo den zugewiesenen Speicher nicht los, falls ein anderer Prozess beginnt, mehr Speicher anzufordern? Verschiedene andere laufende Prozesse, einschließlich Mongodb selbst, wurden ständig von Linux-oom abgebrochen, bevor wir den Arbeitsspeicher vergrößerten und das System dadurch völlig instabil wurde.
Vielen Dank !