[英]Mongorestore - too many open files - mac os x
我试图将一个大数据库的转储导入到我的本地 mongodb 实例。
不幸的是,我发现一个问题,对于导入的集合之一,mongo 抛出异常,即打开了太多文件。
我使用谷歌浏览了互联网的强大知识,我找到了一些使用 ulimit 和 launchctl 的解决方案,但它们没有用。
最后我通过以下方式解决了这个问题:
limit maxproc 512 1024 limit maxfiles 16384 32768
sudo sysctl -w kern.maxfilesperproc=16384 sudo sysctl -w kern.maxfiles=32768
问题不再发生,但我有疑问。 如果有一些解决方案来限制从 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 的命令行选项来限制mongorestore
或mongod
打开的文件数。 由于 MongoDB 使用内存映射文件,如果您有大量数据文件或连接,您可能会超出默认的 O/S 限制。
特别是 OS X 将每个进程的默认限制设置为 256 个打开文件,而在大多数 Linux 发行版上为 1024 个或更高。 见资源限制在MongoDB的手册上的资源利用率和限制的详细信息。
如果您需要打开大量文件,增加 O/S 限制是解决问题的正确方法。 如果您有一个大型数据库,您还应该避免使用 MongoDB smallFiles
配置选项,因为此选项会增加给定数据集所需的打开文件数(通过减少每个数据文件允许的最大大小)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.