Macos Mongorestore-打开的文件太多-mac os x
我试图将一个大数据库的转储导入到我的本地mongodb实例中 不幸的是,我发现一个问题,对于其中一个导入的集合,mongo抛出了异常,即打开的文件太多 我用谷歌浏览了大量的互联网知识,我用ulimit和launchctl找到了一些解决方案,但它们都不起作用 最后,我通过以下方式解决了问题:Macos Mongorestore-打开的文件太多-mac os x,macos,mongodb,Macos,Mongodb,我试图将一个大数据库的转储导入到我的本地mongodb实例中 不幸的是,我发现一个问题,对于其中一个导入的集合,mongo抛出了异常,即打开的文件太多 我用谷歌浏览了大量的互联网知识,我用ulimit和launchctl找到了一些解决方案,但它们都不起作用 最后,我通过以下方式解决了问题: 我创建了/etc/launchd.conf文件,并在其中添加了以下行: 限制maxproc 512 1024 限制最大文件数1638432768 接下来,我在终端中执行以下行: sudo sysctl-w
这个问题不再发生了,但我有个问题。是否有某种解决方案限制mongorestore级别打开的文件数?我不认为增加最大打开文件数的全局值是一个好方法。没有特定于MongoDB的命令行选项来限制由
mongorestore
或mongod
打开的文件数。由于MongoDB使用内存映射文件,因此如果有大量数据文件或连接,可能会超过默认的O/S限制
OSX特别设置了每个进程256个打开文件的默认限制,而在大多数Linux发行版上是1024个或更高。有关资源利用和限制的更多信息,请参阅MongoDB手册中的
如果需要打开大量文件,增加O/S限制是解决此问题的正确方法。如果您有一个大型数据库,您也应该避免使用MongoDB配置选项,因为此选项会增加给定数据集所需的打开文件数(通过减少每个数据文件允许的最大大小)。事实上,--numParallelCollections=1
在OS-X上为我修复了此问题,而无需修改系统设置。我能够完成以前没有完成的完整数据库恢复。
然而,它似乎是最大的连接池,因为我仍然得到
2017-06-01T16:55:19.386+0800 E网络[initandlisten]文件外描述符。在尝试接受更多连接之前等待一秒钟。
当试图继续时。需要重新启动
mongod
我使用此别名以不同的环境设置启动mongod,它解决了迄今为止的所有问题:
ulimit-n1024&&mongod
仅在当前shell会话上更改限制更安全。如果您需要在每个bash控制台会话中使用它,那么将其添加到bash概要文件也是一个选项
ulimit -S -n 2048
your_whatever_greedy_command...
您可以使用另一个值修改2048。
如果贪婪命令正在启动mongo,则它将是:
ulimit-S-n2048和mongod
也有这个问题,因为名称空间太多,无法将内核限制增加到该级别,只为了能够为一个命令设置ulimit。在我看来,这似乎是一个bug:mongorestore可能应该在导入完文件后关闭这些文件,这样就可以解决问题。关于这个问题的一个建议是使用--numParallelCollection 1,它可以解决这个问题(默认值为4)。我仍然有太多打开的文件。这帮助我在macOS 11上运行了
mongod--repair
,如果以前打开的文件太多,它就会失败。
sudo sysctl -w kern.maxfilesperproc=16384
sudo sysctl -w kern.maxfiles=32768
ulimit -S -n 2048
your_whatever_greedy_command...