mongorestore 打开的文件太多

Wyl*_*udd 9 mongodb mongodb-3.4

当我跑步时,mongorestore我得到error running create command: 24: Too many open files.

我已经更新了我的 launchctl limit 和 ulimit。

当我运行时,lanchctl limit我得到:

cpu         unlimited      unlimited      
filesize    unlimited      unlimited      
data        unlimited      unlimited      
stack       8388608        67104768       
core        0              unlimited      
rss         unlimited      unlimited      
memlock     unlimited      unlimited      
maxproc     709            1064           
maxfiles    256000         256000
Run Code Online (Sandbox Code Playgroud)

当我运行时,ulimit -a我得到:

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 256000
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 709
virtual memory          (kbytes, -v) unlimited
Run Code Online (Sandbox Code Playgroud)

我的 mongo 版本是 3.4.7

我的 macOS 是 10.13.2

我怎样才能完成 mongorestore?

还值得一提的是:如果我尝试mongorestore多次运行而不退出计算机或重新启动,cannot make pipe for command substitution: Too many open files我的计算机就会崩溃(这是 2017 年 8 月的全新 iMac)。

Nir*_*ary 9

ulimit 可以在同一个终端中通过 ulimit -n 10000 设置;

您可以通过 nofiles 将 /etc/security/limit.conf 文件中的值更改为 10000 #line

在任何 linux/unix 系统中可以打开的最大文件数是 64000。请确保这个没有。如果您恢复的数据库大小很大,那么尝试将它们制作成更小的部分,例如创建数据库,然后尝试一次恢复一个或几个集合。如果您有 4/8 GB 的 RAM 等内存限制,那么最好按集合而不是整个数据库来恢复集合。

当您从本地系统尝试 mongorestore 时,我相信这不是一个生产系统,也不是一项严肃的业务,如果我的假设是正确的,请尝试一次恢复几个集合,看看您是否仍然面临同样的问题。

感谢@ wylliam-judd分享解决方案;我没有遇到这个问题,因为我使用 linux 作为远程主机并从 putty 和在同一窗口中访问;无论如何,我正在添加您的解决方案以帮助他人

解决方案是在运行 mongod 的控制台中运行 ulimit -n 64000,而不是在运行 mongorestore 的控制台中运行。尽管为了安全起见,我确实在两个控制台中都运行了它,但我无法确定 mongorestore 控制台中的 ulimit 是否必要。在这几个月里,我还尝试了许多其他解决方案,我不能完全确定它们都没有影响,但最终重要的区别是在运行 mongod 的控制台中运行 ulimit。