0

当 oplog 具有默认值时,我无法创建复制,即 rs.initiate()。我的服务器有 400+ GB 的可用空间。在 MongoDB 的官方文档中,MMAP 的默认范围是 990MB 到 50GB 之间可用磁盘空间的 5%,但Memory Use下:-

使用 MMAPv1,MongoDB 会自动使用机器上的所有空闲内存作为其缓存。

在没有 oplog 大小选项的情况下启动 mongod 后执行 rs.initiate() 时控制台出错:

mmap 因内存不足而失败

“errmsg”:“无法启动:文件 /data/0/local.7 在 createPrivateMap 中打开/创建失败(查看日志以获取更多信息)”

所以,我只用 --oplogSize 4096 开始了 mongod,之后我才能够执行 rs.initiate。现在我知道小 oplog 大小的问题,但我想知道后台到底发生了什么。5% 的可用磁盘空间或 50 GB 上限,无论哪种方式,我的服务器中仍有 300 GB 可用。

4

1 回答 1

0

你的内存用完了!
是的,mongo 将(最终)使用所有可用的内存。这里的问题是,使用 5% 的规则,创建那些 local.x 数据库文件系统需要更多的内存,而你当时可用的内存(及时)。

使用 oplogSize 参数,您将 oplog 限制为较小的大小,此时您有足够的内存来创建这些文件。

参数 --smallfiles (storage.mmapv1.smallFiles) 在这种情况下是你的朋友。

于 2017-01-13T05:34:52.130 回答