gpt4 book ai didi

mongodb - Mongorestore 似乎内存不足并杀死了 mongo 进程

转载 作者:行者123 更新时间:2023-12-02 18:44:29 30 4
gpt4 key购买 nike

在当前设置中,有两个 Mongo Docker 容器,在主机 A 和 B 上运行,Mongo 版本为 3.4,并在副本集中运行。我想将它们升级到 3.6 并增加一个成员,以便容器可以在主机 A、B 和 C 上运行。容器有 8GB 内存限制并且没有分配交换空间(当前),并且在 Rancher 中进行管理。 .所以我的计划是启动三个新容器,为它们初始化一个副本集,从 3.4 容器中进行转储,然后将其恢复为新的副本集 master。

转储很顺利,它的大小约为 16GB。当我尝试将其恢复到新的 3.6 master 时,恢复开始正常,但是在恢复了大约 5GB 的数据后,mongo 进程似乎被 OS/Rancher 杀死,而容器本身没有重新启动,MongoDB 进程只是崩溃并重新加载自己。如果我再次运行 mongorestore 到同一个数据库,它会说所有已经插入的条目的唯一键错误,然后从它停止的地方继续,只在 5GB 左右后再次执行相同的操作。所以看起来 mongorestore 将它恢复的所有条目加载到内存中。

所以我必须为此找到一些解决方案,并且:

  • 每次崩溃时,只需运行 mongorestore 命令,以便它从停止的地方继续。它可能应该有效,但我觉得这样做有点不安。
  • 一次恢复数据库一个集合,但最大的集合大于5GB,因此它也无法正常工作。
  • 将交换或物理内存(临时)添加到容器中,以便在进程用完物理内存后该进程不会被终止。
  • 别的东西,希望有更好的解决方案?
  • 最佳答案

    正如另一个答案指出的那样,增加交换大小对我有用。另外,--numParallelCollections选项控制集合的数量mongodump/mongorestore应该并行转储/恢复。默认值为 4,可能会消耗大量内存。

    关于mongodb - Mongorestore 似乎内存不足并杀死了 mongo 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49928102/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com