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

时间:2014-01-20 17:56:36

标签: macos mongodb

我尝试将大型数据库的转储导入我的本地mongodb实例。

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

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

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

  1. 我创建了/etc/launchd.conf文件并添加了以下这些行:
  2.     limit maxproc 512 1024
        limit maxfiles 16384 32768
    
    1. 接下来,我在终端中执行以下行:
    2.     sudo sysctl -w kern.maxfilesperproc=16384
          sudo sysctl -w kern.maxfiles=32768
      
      1. 最后我重新启动了操作系统。
      2. 问题不再发生,但我有疑问。如果有一些解决方案来限制mongorestore级别打开的文件数量?我不认为增加max打开文件的全局值是一个好方法。

4 个答案:

答案 0 :(得分:5)

我使用这个别名启动mongod使用不同的env设置,它解决了迄今为止遇到的任何问题:

ulimit -n 1024 && mongod

答案 1 :(得分:1)

确实--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. 当试图继续。需要重新启动mongod

答案 2 :(得分:1)

仅在当前Shell会话上更改限制更为安全。如果需要在每个bash控制台会话中都将它添加到bash配置文件中,也是一种选择。

ulimit -S -n 2048
your_whatever_greedy_command...

您可以用另一个值修改2048。

答案 3 :(得分:0)

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

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

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