当我跑步时,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
当我跑步时,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
我的 mongo 版本是 3.4.7
我的 macOS 是 10.13.2
如何完成 mongorestore?
另外值得一提的是:如果我mongorestore
在不退出计算机或重新启动的情况下尝试多次运行,cannot make pipe for command substitution: Too many open files
我的计算机就会崩溃(这是 2017 年 8 月的全新 iMac)。
ulimit 可以在同一终端通过 ulimit -n 10000 设置;
您可以通过 nofiles 将 /etc/security/limit.conf 文件中的值更改为 10000 #line
在任何 linux/unix 系统中可以打开的文件的最大数量是 64000。确保这个数量。如果您恢复的数据库大小很大,请尝试将它们制作成更小的部分,例如创建数据库,然后尝试一次恢复一个集合或几个集合。如果您有 4/8 GB RAM 之类的内存限制,那么最好按集合而不是整个数据库来恢复集合。
当您从本地系统尝试 mongorestore 时,我相信这不是一个生产系统,也不是一项严肃的业务,如果我的假设是正确的,请尝试一次恢复几个集合,看看您是否仍然面临同样的问题。
感谢@ wylliam-judd分享解决方案;我没有遇到这个问题,因为我使用 linux 作为远程主机并从 putty 和在同一个窗口中访问;无论如何,我正在添加您的解决方案以帮助他人
解决方案是在运行 mongod 的控制台中而不是在运行 mongorestore 的控制台中运行 ulimit -n 64000。尽管为了安全起见,我确实在两个控制台中都运行了它,但我无法确定 mongorestore 控制台中的 ulimit 是否必要。在这几个月里,我还尝试了许多其他解决方案,我不能完全确定它们都没有影响,但最终重要的区别是在运行 mongod 的控制台中运行 ulimit。
块只是(关键)信息的范围。您不能按块进行还原。ulimit 值(限制)是用户群。因此,您需要为用于还原的用户 ID 赋予更高的打开文件值。
这听起来像是一个问题,这意味着当拥有它们的进程被杀死时,您的内核没有获取文件句柄。