繁体   English   中英

Mongorestore - 打开的文件太多 - mac os x

[英]Mongorestore - too many open files - mac os x

我试图将一个大数据库的转储导入到我的本地 mongodb 实例。

不幸的是,我发现一个问题,对于导入的集合之一,mongo 抛出异常,即打开了太多文件。

我使用谷歌浏览了互联网的强大知识,我找到了一些使用 ulimit 和 launchctl 的解决方案,但它们没有用。

最后我通过以下方式解决了这个问题:

  1. 我创建了 /etc/launchd.conf 文件并在那里添加了以下几行:

limit maxproc 512 1024
    limit maxfiles 16384 32768
  1. 接下来我在终端中执行以下几行:

sudo sysctl -w kern.maxfilesperproc=16384
    sudo sysctl -w kern.maxfiles=32768
  1. 最后我重新启动了操作系统。

问题不再发生,但我有疑问。 如果有一些解决方案来限制从 mongorestore 级别打开的文件数? 我不认为增加最大打开文件的全局值是一个好方法。

我使用这个别名来启动具有不同环境设置的 mongod,它解决了迄今为止的所有问题:

ulimit -n 1024 && mongod

仅更改当前 shell 会话的限制要安全得多。 如果您需要在每个 bash 控制台会话中使用它,也可以将其添加到您的 bash 配置文件中。

ulimit -S -n 2048
your_whatever_greedy_command...

您可以使用另一个值修改 2048。 如果您的贪婪命令正在启动 mongo,它将是:

ulimit -S -n 2048 && mongod

实际上--numParallelCollections=1在 OS-X 上为我解决了这个问题,而无需修改系统设置。 我能够进行以前未完成的完整数据库还原。 然而,它似乎最大化了连接池,因为我仍然得到2017-06-01T16:55:19.386+0800 E NETWORK [initandlisten] Out of file descriptors. Waiting one second before trying to accept more connections. 2017-06-01T16:55:19.386+0800 E NETWORK [initandlisten] Out of file descriptors. Waiting one second before trying to accept more connections. 在尝试继续时。 需要重启mongod

没有特定于 MongoDB 的命令行选项来限制mongorestoremongod打开的文件数。 由于 MongoDB 使用内存映射文件,如果您有大量数据文件或连接,您可能会超出默认的 O/S 限制。

特别是 OS X 将每个进程的默认限制设置为 256 个打开文件,而在大多数 Linux 发行版上为 1024 个或更高。 资源限制在MongoDB的手册上的资源利用率和限制的详细信息。

如果您需要打开大量文件,增加 O/S 限制是解决问题的正确方法。 如果您有一个大型数据库,您还应该避免使用 MongoDB smallFiles配置选项,因为此选项会增加给定数据集所需的打开文件数(通过减少每个数据文件允许的最大大小)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM