Ми використовуємо MongoDB вже декілька тижнів, загальна тенденція, яку ми бачили, полягає в тому, що mongodb використовує занадто багато пам'яті (набагато більше, ніж весь розмір його набору даних + індекси).
Я вже читав це питання і це питання , але, здається, ніхто не вирішує питання, з яким я стикався, вони фактично пояснюють те, що вже пояснено в документації.
Нижче наведені результати htop та показати dbs- команди.
Я знаю, що mongodb використовує IO, відображений на пам’яті, тому в основному ОС обробляє кешування речей у пам'яті, і mongodb теоретично повинен відпускати кешовану пам’ять, коли інший процес вимагає вільної пам’яті , але з того, що ми бачили, він цього не робить.
OOM починає вбивати інші важливі процеси, наприклад, postgres, redis тощо. (Як видно, для подолання цієї проблеми ми збільшили оперативну пам’ять до 183 Гб, що зараз працює, але досить дорого. Монго використовує ~ 87 ГБ оперативної пам’яті, майже 4X розміру всього його набору даних)
Так,
- Чи справді очікуване та нормальне таке використання пам'яті? (Відповідно до документації, WiredTiger використовує не більше ~ 60% оперативної пам’яті для свого кешу, але, враховуючи розмір набору даних, чи є у нього навіть достатньо даних, щоб можна було взяти 86 ГБ оперативної пам’яті?)
- Навіть якщо очікується використання пам’яті, чому монго не відпустить виділену пам’ять у випадку, якщо інший процес почне запитувати більше пам’яті? Різні інші запущені процеси постійно вбивали linux oom, включаючи саму mongodb, перш ніж ми збільшили оперативну пам’ять, і це зробило систему абсолютно нестабільною.
Спасибі !