Мы используем MongoDB уже несколько недель, общая тенденция, которую мы видели, заключается в том, что mongodb использует слишком много памяти (намного больше, чем весь размер его набора данных + индексы).
Я уже прочитал этот вопрос и этот вопрос , но, похоже, никто не решает проблему, с которой я столкнулся, они фактически объясняют то, что уже объяснено в документации.
Ниже приведены результаты команд htop и show dbs .
Я знаю, что mongodb использует IO с отображением в памяти, поэтому в основном ОС обрабатывает кэширование в памяти, и mongodb должен теоретически освобождать свою кэшированную память, когда другой процесс запрашивает свободную память , но, как мы видели, это не так.
OOM начинает работу, убивая другие важные процессы, такие как postgres, redis и т. Д. (Как можно видеть, чтобы преодолеть эту проблему, мы увеличили объем ОЗУ до 183 ГБ, который сейчас работает, но довольно дорогой. Монго использует ~ 87 ГБ ОЗУ, почти в 4 раза больше, чем весь его набор данных)
Так,
- Действительно ли такое потребление памяти ожидается и нормально? (Согласно документации, WiredTiger использует максимум ~ 60% оперативной памяти для своего кэша, но, учитывая размер набора данных, достаточно ли данных для того, чтобы можно было использовать 86 ГБ оперативной памяти?)
- Даже если ожидается использование памяти, почему mongo не отпустит выделенную память, если другой процесс начнет запрашивать больше памяти? Различные другие запущенные процессы были постоянно убиты linux oom, включая сам mongodb, прежде чем мы увеличили объем оперативной памяти, и это сделало систему совершенно нестабильной.
Благодарность !