Справжня причина, чому ви не можете робити так, як ви просите (обмежте пам'ять), полягає в тому, що MongoDB не керує пам'яттю, яку вона використовує безпосередньо - це дозволяє операційній системі робити це. MongoDB просто пам'ять відображає всі свої дані, а потім має сторінку ОС, в яку вона входить і не залишається в пам'яті. Як результат, неможливе пряме управління використаною сумою, поки MongoDB не реалізує це зовсім по-іншому, або ОС це дозволить (неможливо в Linux з 2,4 дня).
Наразі єдиний спосіб по-справжньому розділити ресурси - використовувати рішення щодо віртуалізації та ізолювати MongoDB у власній віртуальній машині. Так, задіяні накладні витрати (хоча гіпервізори значно покращилися), але на даний момент це ціна, яку потрібно заплатити за цей рівень контролю за ресурсами.
Що стосується OOM Killer, навіть якщо немає жодних інших процесів на хості, доки ваш набір даних та загальні індекси перевищують наявну пам'ять, MongoDB може впливати на проблеми OOM Killer. Це пов’язано з тим, як дані завантажуються з пам'яті в пам'ять - якщо тиску в пам'яті немає (нічого більше не хоче пам'ять резидента), і ви продовжуєте додавати / торкатися нових даних та індексів, то з часом вони зростатимуть, щоб споживати всю наявну оперативну пам'ять. Звідси рекомендується завжди налаштовувати деякий своп під час роботи MongoDB:
https://docs.mongodb.com/manual/administration/production-notes/#swap
Звичайно, спочатку будуть завантажуватись дані про LRU, інші процеси також можуть зайняти запам'ятовувальну пам'ять, але ця концепція все ще застосовується, якщо ви не завантажуєте набір даних у пам'ять і тоді вони залишаються статичними. Найкраще робити, якщо ви переживаєте, це передати його в MMS і відстежувати використання з часом:
http://mms.mongodb.com
Оновлення: серпень 2015 року
З тих пір, як я написав цю відповідь, справи дещо змінилися, і інформація трохи застаріла. Наприклад, Linux тепер є контрольні групи і пов'язана з ними технологія ( докер контейнери , наприклад) , які дозріли до того, що вони дозволяють краще ізолятів і обмежити ресурси ( в тому числі і пам'ять ) , споживаних будь-який процес у виробничому середовищі, навіть той , який використовує відображення пам'яті на зразок MongoDB.
Крім того, з появою нових двигунів зберігання даних, що не входять до MMAP, таких як WiredTiger в MongoDB 3.0+, ви можете використовувати вбудовану функціональність для обмеження розміру кешу для MongoDB. Отже, вимоги оперативної пам’яті зараз дійсно залежать від того, як ви вирішите налаштувати MongoDB, у якому середовищі ви запускаєте його та який механізм зберігання даних ви вибрали.