Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos Mongorestore-打开的文件太多-mac os x_Macos_Mongodb - Fatal编程技术网

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

Macos Mongorestore-打开的文件太多-mac os x,macos,mongodb,Macos,Mongodb,我试图将一个大数据库的转储导入到我的本地mongodb实例中 不幸的是,我发现一个问题,对于其中一个导入的集合,mongo抛出了异常,即打开的文件太多 我用谷歌浏览了大量的互联网知识,我用ulimit和launchctl找到了一些解决方案,但它们都不起作用 最后,我通过以下方式解决了问题: 我创建了/etc/launchd.conf文件,并在其中添加了以下行: 限制maxproc 512 1024 限制最大文件数1638432768 接下来,我在终端中执行以下行: sudo sysctl-w

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

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

我用谷歌浏览了大量的互联网知识,我用ulimit和launchctl找到了一些解决方案,但它们都不起作用

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

  • 我创建了/etc/launchd.conf文件,并在其中添加了以下行:
  • 限制maxproc 512 1024 限制最大文件数1638432768
  • 接下来,我在终端中执行以下行:
  • sudo sysctl-w kern.maxfilesperproc=16384 sudo sysctl-w kern.maxfiles=32768
  • 最后我重新启动了操作系统

  • 这个问题不再发生了,但我有个问题。是否有某种解决方案限制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...