İstediğiniz gibi yapamamanızın asıl nedeni (belleği sınırlamak) MongoDB'nin kullandığı belleği doğrudan yönetmemesidir - işletim sisteminin bunu yapmasına izin verir. MongoDB sadece bellek tüm verilerini eşler ve daha sonra OS sayfasını gerektiğinde belleğe girip çıkarır. Sonuç olarak, MongoDB bunu tamamen farklı bir şekilde uygulayana veya işletim sistemi izin verene kadar (2.4 günde Linux'ta mümkün değildir) kullanılan miktarın doğrudan yönetimi yoktur.
Şu anda kaynakları gerçekten ayırmanın tek yolu bir sanallaştırma çözümü kullanmak ve MongoDB'yi kendi VM'sinde izole etmektir. Evet, ilgili genel giderler var (hipervizörler çok daha iyi hale gelmiş olsa da), ancak şu anda bu kaynak kontrolü seviyesi için ödenecek fiyat.
OOM Killer açısından, ana bilgisayar üzerinde başka hiçbir işlem yapılmasa bile, veri kümeniz ve dizinleriniz genel olarak kullanılabilir belleği aştığı sürece MongoDB, OOM Killer sorunlarını vurabilir. Bunun nedeni, verilerin bellekte nasıl bellekte kalmasıdır - bellek baskısı yoksa (başka bir şey Yerleşik bellek istemez) ve yeni veri ve dizinler eklemeye / dokunmaya devam ederseniz, sonunda tüm kullanılabilir RAM'i tüketmek için büyür. Bu nedenle MongoDB'yi çalıştırırken her zaman bazı takas yapılandırmanız önerilir:
https://docs.mongodb.com/manual/administration/production-notes/#swap
Tabii ki, LRU verileri önce çağrılacaktır, diğer işlemler de res memünü alabilir, ancak veri setinizi belleğe yüklemediğiniz ve daha sonra statik kalmadıkça kavram hala geçerlidir. Endişeleniyorsanız yapılacak en iyi şey, MMS'e almak ve zaman içinde kullanımı izlemek:
http://mms.mongodb.com
Güncelleme: Ağustos 2015
Bu cevabı yazdığımdan beri işler biraz ilerledi ve bilgiler biraz güncel değil. Örneğin, Linux artık üretim ortamında herhangi bir işlem tarafından tüketilen kaynakları ( bellek dahil ) daha iyi izole etmenize ve sınırlandırmanıza izin veren noktaya kadar olgunlaşan gruplara ve ilgili teknolojilere ( örneğin Docker kapsayıcıları ) sahiptir. MongoDB gibi bellek eşleme.
Ayrıca, MongoDB 3.0 ve sonraki sürümlerinde WiredTiger gibi MMAP'ın ötesindeki yeni depolama motorlarının ortaya çıkmasıyla MongoDB'nin önbellek boyutunu sınırlamak için yerleşik işlevselliği kullanabilirsiniz . Bu nedenle, RAM gereksinimleri artık MongoDB'yi nasıl yapılandırmayı seçtiğinize, hangi ortamda çalıştırdığınıza ve hangi depolama motorunu seçtiğinize bağlıdır.