MongoDB:RAM需求


20

将整个索引存储在memory / ram中是否足够?mongodb甚至尝试分配尽可能多的ram来存储甚至用于快速读取的数据吗?

我想运行mongodb +其他应用程序,看起来mongodb是唯一一个不允许我定义RAM范围的应用程序,可以说“ max_memory_allocated_or_reserved = 8GB”。

如果没有办法,我应该向oom-killer解释说mongod是“不好的”过程,我认为这不是最佳实践。

Answers:


18

您不能按要求执行操作(限制内存)的真正原因是因为MongoDB不管理其直接使用的内存-操作系统可以执行此操作。MongoDB只是内存会映射其所有数据,然后根据需要让OS页面在内存中进出内存。结果,直到MongoDB以完全不同的方式实现这一目标,或者OS允许它为止,才对可能使用的数量进行直接管理(自2.4天以来,这在Linux中是不可能的)。

当前,真正隔离资源的唯一方法是使用虚拟化解决方案,并在其自己的VM中隔离MongoDB。是的,这涉及开销(尽管虚拟机管理程序已经变得更好了),但是目前,这是该级别资源控制要付出的代价。

就OOM Killer而言,即使主机上没有其他进程,只要您的数据集和索引总体超过了可用内存,MongoDB都会遇到OOM Killer问题。这是因为数据如何从内存中分页-如果没有内存压力(没有其他东西需要常驻内存),并且您不断添加/处理新数据和索引,那么最终它将增长以消耗所有可用RAM。因此,建议在运行MongoDB时始终配置一些交换:

https://docs.mongodb.com/manual/administration/production-notes/#swap

当然,LRU数据将首先被分页,其他进程也可能占用资源,但是该概念仍然适用,除非您将数据集加载到内存中然后保持静态。如果您担心的话,最好的办法是将其放入MMS并跟踪一段时间内的使用情况:

http://mms.mongodb.com

更新:2015年8月

自从我写了这个答案以来,事情已经有些进展,信息有点过时了。例如,Linux现在具有cgroup和相关技术(例如Docker容器),它们已经成熟到可以使您更好地隔离和限制生产环境中任何进程(甚至是使用生产环境的任何进程)消耗的资源(包括内存)的程度。内存映射(如MongoDB)。

此外,随着MMAP以外的新存储引擎的出现,例如MongoDB 3.0+中的WiredTiger,您可以使用内置功能来限制 MongoDB 的缓存大小。因此,对RAM的需求实际上确实取决于您选择如何配置MongoDB,在其中运行的环境以及所选择的存储引擎。


关于WiredTiger:“ storage.wiredTiger.engineConfig.cacheSizeGB仅限制WiredTiger缓存的大小,而不限制mongod使用的内存总量。WiredTiger缓存只是MongoDB使用的RAM的一个组成部分。MongoDB也会自动使用所有通过文件系统缓存在计算机上释放可用内存...
Stefan Rogin

是的,但是对于从磁盘上分页数据的任何应用程序也可以这样说,FS高速缓存不再是数据的主要高速缓存方法,因为它曾经是MMAP存储引擎中的内存映射文件
Adam C


3

多年来,有关MongoDB的事情已经发生了变化。

TL; DR

如果在MongoDB上使用MMAPv1存储引擎,则working set大小必须适合RAMhttps://docs.mongodb.com/manual/faq/diagnostics/#must-my-working-set-size-fit-ram

如果WiredTiger存储引擎是在MongoDB的使用,并不需要有关RAM关注的是适合working set与否https://docs.mongodb.com/manual/faq/diagnostics/#memory-diagnostics-for-the-wiredtiger-storage-engine

WiredTiger存储引擎的内存诊断

我的工作台尺寸是否必须适合RAM?

没有。

如何计算应用程序需要多少RAM?

借助WiredTiger,MongoDB可以利用WiredTiger内部缓存和文件系统缓存。

在版本3.2中进行了更改:从MongoDB 3.2开始,默认情况下,WiredTiger内部缓存将使用以下两者中的较大者:

60%的RAM减去1 GB或1 GB。


好吧,这个答案并没有太大帮助,也不是非常准确。
菲利普·希夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.