我试图将一个大数据库的转储导入我的本地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级别打开的文件数量?我不认为增加max打开文件的全局值是一个好方法.
仅更改当前 shell 会话的限制要安全得多。如果您需要在每个 bash 控制台会话中使用它,也可以将其添加到您的 bash 配置文件中。
ulimit -S -n 2048
your_whatever_greedy_command...
Run Code Online (Sandbox Code Playgroud)
您可以使用另一个值修改 2048。如果您的贪婪命令正在启动 mongo,它将是:
ulimit -S -n 2048 && mongod
没有特定于 MongoDB 的命令行选项来限制mongorestore或打开的文件数量mongod。由于 MongoDB 使用内存映射文件,如果您有大量数据文件或连接,则可能会超出默认的操作系统限制。
OS X 特别设置了每个进程 256 个打开文件的默认限制,而大多数 Linux 发行版上的打开文件数为 1024 个或更高。有关资源利用率和限制的更多信息,请参阅MongoDB 手册中的资源限制。
如果您需要打开大量文件,则增加操作系统限制是解决问题的正确方法。如果您有大型数据库,您还应该避免使用 MongoDBsmallFiles配置选项,因为此选项会增加给定数据集所需的打开文件数量(通过减少每个数据文件允许的最大大小)。
| 归档时间: |
|
| 查看次数: |
4774 次 |
| 最近记录: |