【问题标题】:MongoDb replica-server getting killed due to less memory?MongoDb 副本服务器由于内存不足而被杀死?
【发布时间】:2012-03-29 09:21:18
【问题描述】:

这里需要大量帮助,因为这会影响我们的生产实例。

其中一个副本服务器由于内存不足而失败(请参阅下面的 kern.log 块)

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

更新

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 内存,而辅助服务器有 3.1GB 内存。
  3. 两台服务器都是 64 位机器,分别运行 Debian/Ubuntu。
  4. 在两台服务器上运行 Mongo 2.0.2

注意: 我最近在 Jira-Mongo 网站上看到了类似的 issue has been created - 还没有答案。

【问题讨论】:

    标签: mongodb replication


    【解决方案1】:

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

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

    提到的问题发生在完全重新同步期间,而不是正在进行的生产复制期间 - 您也在这样做吗?

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

    【讨论】:

    • 是的,这个问题在重新同步期间发生 - 我已经安装了这个服务器并添加为副本成员,我相信 Mongo 会在辅助服务器中重新同步 (?)
    • 辅助有交换分区吗?很可能它被杀死了,因为同步和后续的索引构建消耗了太多的 RAM - 添加交换应该会阻止它,但意味着它会运行缓慢
    • 根据您的建议,我添加了一个不存在的交换文件,让我看看是否有帮助。
    • 您使用的是哪个版本的 MongoDB?
    • @DeepKapadia 我在两台服务器上都运行 Mongo 2.0.2。
    【解决方案2】:

    我遇到了类似的问题。要检查的一件事是您有多少打开的连接。运行 lsof 命令以查看与 mongod 进程关联的打开文件。尝试禁用日记功能,看看您是否看到较少数量的打开文件。如果是这样,让副本赶上,然后重新启用日志。这可能会有所帮助。添加交换也应该有帮助,或者如果可能的话暂时增加 RAM。

    【讨论】:

    • 我害怕删除日志并重新启用它们,添加交换内存对我有帮助。
    猜你喜欢
    • 1970-01-01
    • 2023-03-04
    • 2013-04-20
    • 2016-08-24
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多