เหตุผลที่แท้จริงว่าทำไมคุณไม่สามารถทำตามที่คุณถามได้ (จำกัด หน่วยความจำ) เพราะ MongoDB ไม่จัดการหน่วยความจำที่ใช้โดยตรง - ทำให้ระบบปฏิบัติการทำได้ MongoDB เพียงหน่วยความจำแมปข้อมูลทั้งหมดแล้วมีหน้าระบบปฏิบัติการในและนอกหน่วยความจำตามต้องการ เป็นผลให้ไม่มีการจัดการโดยตรงของจำนวนเงินที่ใช้ไปได้จนกว่า MongoDB จะดำเนินการนี้ในวิธีที่แตกต่างอย่างสิ้นเชิงหรือระบบปฏิบัติการอนุญาต (ไม่สามารถทำได้ใน Linux ตั้งแต่ 2.4 วัน)
วิธีเดียวที่จะแยกทรัพยากรอย่างแท้จริงในปัจจุบันคือการใช้โซลูชันการจำลองเสมือนและแยก MongoDB ใน VM ของตัวเอง ใช่มีค่าใช้จ่ายที่เกี่ยวข้อง (แม้ว่าไฮเปอร์ไวเซอร์ได้รับมากขึ้น) แต่ในขณะนี้คือราคาที่ต้องจ่ายสำหรับการควบคุมทรัพยากรระดับนั้น
ในแง่ของ OOM Killer แม้ว่าจะไม่มีกระบวนการอื่นใดบนโฮสต์ตราบใดที่ชุดข้อมูลและดัชนีโดยรวมของคุณมีหน่วยความจำเกินกว่าที่มีอยู่ MongoDB ก็สามารถแก้ไขปัญหา OOM Killer ได้ นี่เป็นเพราะข้อมูลถูกเพจออกจากหน่วยความจำ - ถ้าไม่มีความกดดันหน่วยความจำ (ไม่มีสิ่งใดต้องการหน่วยความจำ Resident) และคุณยังคงเพิ่ม / สัมผัสข้อมูลใหม่และดัชนีใหม่ ๆ ในที่สุดมันก็จะกิน RAM ที่มีอยู่ทั้งหมด ดังนั้นคำแนะนำให้กำหนดค่าการสลับบางอย่างเสมอเมื่อรัน MongoDB:
https://docs.mongodb.com/manual/administration/production-notes/#swap
แน่นอนว่าข้อมูล LRU จะถูกเพจก่อนกระบวนการอื่นอาจใช้ res mem ได้เช่นกัน แต่แนวคิดนี้ยังคงมีผลบังคับใช้เว้นแต่คุณจะโหลดข้อมูลของคุณที่ตั้งไว้ในหน่วยความจำ สิ่งที่ดีที่สุดที่ควรทำหากคุณกังวลคือนำไปไว้ใน MMS และติดตามการใช้งานเมื่อเวลาผ่านไป:
http://mms.mongodb.com
อัปเดต: สิงหาคม 2558
ตั้งแต่ฉันเขียนคำตอบนี้สิ่งต่าง ๆ ได้ย้ายไปบ้างและข้อมูลค่อนข้างล้าสมัย ตัวอย่างเช่น Linux มีcgroupsและเทคโนโลยีที่เกี่ยวข้อง ( เช่นDocker container ) ที่ครบกำหนดจนถึงจุดที่อนุญาตให้คุณแยกและ จำกัด ทรัพยากร ( รวมถึงหน่วยความจำ ) ที่ใช้โดยกระบวนการใด ๆ ในสภาพแวดล้อมการผลิตแม้กระทั่งที่ใช้ การแมปหน่วยความจำเช่น MongoDB
นอกจากนี้ด้วยการมีเอนจิ้นการจัดเก็บใหม่นอกเหนือจาก MMAP เช่น WiredTiger ใน MongoDB 3.0+ คุณสามารถใช้ฟังก์ชันการทำงานในตัวเพื่อจำกัด ขนาดแคชสำหรับ MongoDB ดังนั้นความต้องการของ RAM ในตอนนี้จะขึ้นอยู่กับวิธีที่คุณเลือกกำหนดค่า MongoDB สภาพแวดล้อมที่คุณใช้และเครื่องมือเก็บข้อมูลที่คุณเลือก