Mongodb在内存不足时终止
我有以下配置:Mongodb在内存不足时终止,mongodb,docker,limit,ram,Mongodb,Docker,Limit,Ram,我有以下配置: 运行三个docker容器的主机: 蒙哥达 雷迪斯 使用前两个容器存储数据的程序 Redis和Mongodb都用于存储大量数据。我知道Redis需要将所有数据保存在RAM中,我对此很满意。不幸的是,Mongo开始占用大量RAM,一旦主机RAM满了(我们这里说的是32GB),Mongo或Redis就会崩溃 我已经阅读了关于这一点的以下问题: :显然,大多数RAM已被WiredTiger缓存耗尽 :这里的问题显然是日志数据 :在这里,他们建议限制mongo的内存,以便它使用更少
- 运行三个docker容器的主机:
- 蒙哥达
- 雷迪斯
- 使用前两个容器存储数据的程序
限制WiredTiger缓存大小完全可以,因为它可以非常有效地处理I/O操作
MongoDB使用LRU(最近使用最少的)缓存算法来确定要释放哪些“页面”,您将在这两个问题中找到更多信息
MongoDB将尽可能多的索引保存在RAM中。他们将在LRU的基础上被交换出去。您经常会看到一些文档建议您应该将“工作集”保存在内存中:如果您实际访问的索引部分适合内存,您就可以了。
--memory
和--memory swap
限制了Mongo Docker容器的内存(例如8GB),但Mongo并没有从磁盘中提取内容,而是在内存用完后立即崩溃
我如何才能强制Mongo只使用可用内存,并从磁盘获取不适合内存的所有内容?多亏@AlexBlex的评论,我解决了我的问题。显然,问题在于Docker将容器的RAM限制为
8GB
,但wiredTiger存储引擎仍在试图将其缓存的总系统RAM的50%-1GB
(在我的情况下,这应该是15GB
)
通过使用小于Docker分配的值来限制wiredTiger的缓存大小,解决了问题。这确实更适合于or,因为它是关于数据库服务器软件,而不是应用程序代码。好的,管理员可以移动它。我应该对此做些什么吗?(虽然我链接的大多数问题都来自StackOverflow)其中一些问题是在这两个网站之前提出的。关于MongoDB的这两个问题,每一个都有1500多个问题。如果是关于安装,我会说是服务器故障站点。如果是关于调优的,DBA。很好的研究工作,但问题本身相当模糊。存储配置和实际错误消息是关键缺失位。理想情况下,如果您可以共享Dockerfile和最简单的mgenerate,则会重现问题。对于运行在无法访问整个内存的容器中的mongodb,这是一个特别的注意事项。您是如何将配置选项放入docker容器中的?啊,您可以使用命令行选项--
--wiredTigerCacheSizeGB
Hi@rjmunro如果存储引擎是MMAPv1怎么办?没有配置缓存大小的选项。嘿@Simone我们正在docker中运行MongoDB,内存有问题。当我看到free-m时,它使用了超过8gb的大量内存,所以我假设它与此问题有关?