Lý do thực sự tại sao bạn không thể làm như bạn yêu cầu (giới hạn bộ nhớ) là vì MongoDB không quản lý bộ nhớ mà nó sử dụng trực tiếp - nó cho phép HĐH làm điều đó. MongoDB chỉ cần bộ nhớ ánh xạ tất cả dữ liệu của nó và sau đó có trang hệ điều hành trong và ngoài bộ nhớ khi cần. Kết quả là, không có sự quản lý trực tiếp số tiền được sử dụng cho đến khi MongoDB thực hiện việc này theo một cách hoàn toàn khác hoặc HĐH cho phép nó (không thể có trong Linux kể từ 2,4 ngày).
Cách duy nhất để thực sự tách biệt các tài nguyên hiện tại là sử dụng giải pháp ảo hóa và cô lập MongoDB trong VM của chính nó. Vâng, có những chi phí liên quan (mặc dù các nhà ảo thuật đã tốt hơn rất nhiều), nhưng tại thời điểm đó là cái giá phải trả cho mức độ kiểm soát tài nguyên đó.
Về mặt OOM Killer, ngay cả khi không có quá trình nào khác trên máy chủ, miễn là tập dữ liệu và chỉ mục của bạn vượt quá bộ nhớ khả dụng, MongoDB có thể gặp sự cố OOM Killer. Điều này là do cách dữ liệu được phân trang ra khỏi bộ nhớ - nếu không có áp lực bộ nhớ (không có gì khác muốn bộ nhớ Resident) và bạn tiếp tục thêm / chạm vào dữ liệu và chỉ mục mới, thì cuối cùng nó sẽ phát triển để tiêu thụ hết RAM có sẵn. Do đó, khuyến nghị luôn luôn định cấu hình một số trao đổi khi chạy MongoDB:
https://docs.mongodb.com/manual/adftime/production-notes/#swap
Tất nhiên, dữ liệu LRU sẽ được phân trang trước, các quá trình khác cũng có thể chiếm res mem, nhưng khái niệm này vẫn được áp dụng trừ khi bạn tải dữ liệu của mình vào bộ nhớ và sau đó nó ở trạng thái tĩnh. Điều tốt nhất để làm nếu bạn lo lắng là đưa nó vào MMS và theo dõi việc sử dụng theo thời gian:
http://mms.mongodb.com
Cập nhật: Tháng 8 năm 2015
Kể từ khi tôi viết câu trả lời này, mọi thứ đã chuyển sang phần nào và thông tin có chút lỗi thời. Ví dụ, Linux hiện có các nhóm và công nghệ liên quan ( ví dụ: Docker container ) đã hoàn thiện đến mức chúng cho phép bạn cách ly và hạn chế tốt hơn các tài nguyên ( bao gồm cả bộ nhớ ) được sử dụng bởi bất kỳ quy trình nào trong môi trường sản xuất, ngay cả một quy trình sử dụng ánh xạ bộ nhớ như MongoDB.
Ngoài ra, với sự ra đời của các công cụ lưu trữ mới ngoài MMAP như WiredTiger trong MongoDB 3.0+, bạn có thể sử dụng chức năng tích hợp để giới hạn kích thước bộ đệm cho MongoDB. Do đó, các yêu cầu về RAM bây giờ thực sự phụ thuộc vào cách bạn chọn định cấu hình MongoDB, môi trường bạn chạy nó và công cụ lưu trữ nào bạn chọn.