首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存安全的mongodb任务

内存安全的mongodb任务
EN

Stack Overflow用户
提问于 2013-02-06 04:33:39
回答 2查看 812关注 0票数 1

在为50 on集合的时间戳字段添加单个索引时,MongoDB在96 on根服务器上的内存不足。

MongoDB是否有在“安全模式”下运行查询或任务的选项,例如,不会过多地削减内存?它似乎非常敏感,可能会崩溃,例如,通过在非索引时间戳字段上运行一些带有$lte/$gt的查找查询。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-06 05:13:26

我不能控制它,但是是否应该有一个“安全”的mongodb配置设置,确保一旦内存超过限制就释放内存?也许甚至在它阻塞其他进程或被oom杀手停止之前?

MongoDB不使用自己的内存管理。相反,它使用操作系统的LRU。操作系统之所以大量地对文档进行分页,是因为它使用了分配给mongod的内存量,也就是说,您的工作集比您为MongoDB保留的内存量要大,因为MongoDB会为大多数数据交换分页错误,而不是所有数据(分页的一个很好的参考资料:http://en.wikipedia.org/wiki/Paging )。

我强烈不建议在这种情况下限制MongoDB,因为它的运行情况会更糟,但是,特别是在Linux上,您实际上可以在用于运行mongodhttp://docs.mongodb.org/manual/administration/ulimit/mongo用户上使用ulimit

MongoDB是否有在“安全模式”下运行查询或任务的选项,例如,不会过多地削减内存?

不怎么有意思。

它似乎非常敏感,可能会崩溃,例如,通过在非索引时间戳字段上运行一些带有$lte/$gt的查找查询。

当然,这不应该导致MongoDB出现面向对象的异常,它可能表明某个地方存在内存泄漏:http://docs.mongodb.org/manual/administration/ulimit/

如果您在运行MongoDB的系统上限制驻留内存大小,则可能会允许操作系统在正常情况下终止MongoDB进程。请勿设置此值。如果操作系统(例如Linux)杀死了你的魔神,使用面向对象模型杀手,检查serverStatus的输出,并确保MongoDB没有泄漏内存。

票数 1
EN

Stack Overflow用户

发布于 2013-02-06 04:52:56

它似乎非常敏感,可能会崩溃,例如,通过在非索引时间戳字段上运行一些带有$lte/$gt的查找查询。

这是OOM杀手杀死它的原因,因为mongod实例正在将大量页面交换到RAM中。您可能有很多进程在争用RAM。您可以指示Linux不要终止mongod守护进程,如下所示:

代码语言:javascript
复制
sudo echo -17 > /proc/<process if of mongod>/oom_adj

不幸的是,你无法控制mongodb使用了多少内存。我建议你看看background indexing docs on mongodb。还有一些更有用的链接:

  1. See the related thread on stackoverflow
  2. How do i limit the cache size?
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14716387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档