2012-03-29 143 views
2

这里需要巨大的帮助,因为这影响了我们的生产实例。MongoDb副本服务器由于内存不足而死亡?

一个副本服务器是缺乏存储器失败因(见下文来自kern.log片的块)

kernel: [80110.848341] Out of memory: kill process 4643 (mongod) score 214181 or a child 
kernel: [80110.848349] Killed process 4643 (mongod) 

UPDATE

kernel: mongod invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0 
kernel: [85544.157191] mongod cpuset=/ mems_allowed=0 
kernel: [85544.157195] Pid: 7545, comm: mongod Not tainted 2.6.32-318-ec2 

透视:

  1. 主服务器数据库大小是50GB,其中30GB是由索引填充的。
  2. 主服务器有7GB RAM,而辅助服务器有3.1GB RAM。
  3. 这两台服务器都是64位机器,分别运行Debian/Ubuntu。
  4. 两个服务器

注上运行蒙戈2.0.2: 我看到吉拉 - 蒙戈的网站最近类似issue has been created - 没有问题的答案呢。

回答

5

你在这些实例上启用了交换吗?虽然mongoDB操作通常不需要,但它可以防止进程在内核遇到OOM情况时被内核杀死。这就是这里所说的:

http://www.mongodb.org/display/DOCS/Production+Notes#ProductionNotes-Swap

引用的完全重新同步,而不是正在进行的生产复制过程中发生了问题 - 是,你还做什么?

一旦事情稳定下来,看一下你在mongostat或MMS上的Res内存,如果超过或接近3GB,你应该考虑升级你的辅助。

+0

是的,在重新同步过程中发生了这个问题 - 我已经安装了这个服务器并添加为副本成员,我相信Mongo会在辅助服务器(?)中重新同步 – 2012-03-29 10:17:28

+0

副本是否有交换分区?它很有可能被杀死,因为同步和随后的索引构建消耗了太多的内存 - 添加swap会停止,但意味着它会运行缓慢 – 2012-03-29 10:53:52

+0

根据您的建议我添加了一个交换文件,在那里,让我看看是否有帮助。 – 2012-03-29 11:18:23

0

我有类似的问题。其中一个要检查的是你有多少个开放连接。运行lsof命令查看与mongod进程关联的打开文件。尝试禁用日记功能,并查看是否看到少量的打开文件。如果是这样,请复制副本,然后重新启用日记功能。这可能有帮助。添加交换也应该有帮助,或者如果可能的话临时存储RAM。

+0

我害怕删除日志并重新启用它们,添加交换内存帮助了我。 – 2012-03-30 09:16:01