Alasan sebenarnya mengapa Anda tidak dapat melakukan apa yang Anda minta (batasi memori) adalah karena MongoDB tidak mengelola memori yang digunakan secara langsung - itu memungkinkan OS melakukannya. MongoDB hanya memetakan memori semua data dan kemudian memiliki halaman OS itu masuk dan keluar dari memori sesuai kebutuhan. Akibatnya, tidak ada manajemen langsung dari jumlah yang digunakan mungkin sampai MongoDB mengimplementasikan ini dengan cara yang sama sekali berbeda, atau OS memungkinkannya (tidak mungkin di Linux sejak 2,4 hari).
Satu-satunya cara untuk benar-benar memisahkan sumber daya saat ini adalah dengan menggunakan solusi virtualisasi dan mengisolasi MongoDB dalam VM-nya sendiri. Ya, ada overhead yang terlibat (meskipun hypervisor sudah jauh lebih baik), tetapi pada saat itu adalah harga yang harus dibayar untuk tingkat kontrol sumber daya tersebut.
Dalam hal OOM Killer, bahkan tanpa proses lain pada host, selama kumpulan data dan indeks Anda secara keseluruhan melebihi memori yang tersedia, MongoDB dapat menekan masalah OOM Killer. Ini karena cara data keluar dari memori - jika tidak ada tekanan memori (tidak ada yang menginginkan memori penduduk), dan Anda terus menambahkan / menyentuh data dan indeks baru, maka pada akhirnya akan tumbuh untuk mengkonsumsi semua RAM yang tersedia. Karenanya rekomendasi untuk selalu mengonfigurasi beberapa swap saat menjalankan MongoDB:
https://docs.mongodb.com/manual/administration/production-notes/#swap
Tentu saja, data LRU akan keluar terlebih dahulu, proses lain juga dapat mengambil res, tetapi konsep tersebut tetap berlaku kecuali jika Anda memuat kumpulan data ke dalam memori dan kemudian tetap statis. Hal terbaik untuk dilakukan jika Anda khawatir adalah memasukkannya ke MMS dan melacak penggunaannya dari waktu ke waktu:
http://mms.mongodb.com
Pembaruan: Agustus 2015
Sejak saya menulis jawaban ini, banyak hal telah berubah dan informasinya sedikit ketinggalan zaman. Sebagai contoh, Linux sekarang memiliki cgroup dan teknologi terkait ( Docker misalnya) yang telah matang hingga memungkinkan mereka untuk mengisolasi dan membatasi sumber daya ( termasuk memori ) dengan lebih baik yang dikonsumsi oleh setiap proses dalam lingkungan produksi, bahkan yang menggunakan pemetaan memori seperti MongoDB.
Selain itu, dengan munculnya mesin penyimpanan baru di luar MMAP seperti WiredTiger di MongoDB 3.0+ Anda dapat menggunakan fungsi bawaan untuk membatasi ukuran cache untuk MongoDB. Oleh karena itu, persyaratan RAM sekarang benar-benar tergantung pada bagaimana Anda memilih untuk mengkonfigurasi MongoDB, lingkungan tempat Anda menjalankannya, dan mesin penyimpanan apa yang Anda pilih.