试图移动一个拥有1亿多个文档的MongoDB数据库。将其从AWS中的服务器移到GCP中的服务器。试过了mongodump
--它成功了,但是mongorestore
一直在犯错误-
error running create command: 24: Too many open files
这是如何做到的呢?
不希望通过在AWS服务器上创建脚本进行传输,以获取每个文档并推送到GCP服务器上的API端点,因为这将花费太长的时间。
编辑(添加更多细节)已经尝试将ulimit -n
设置为无限。不工作,因为GCP有一个无法修改的硬编码限制。
发布于 2017-09-03 18:40:42
看起来您正在为您的用户命中ulimit
。这可能是下列部分或全部的一个功能:
ulimit
(可能是256或1024,取决于操作系统)mongorestore
的方式可以增加并发性,从而增加并发打开的文件句柄的数量。您可以通过调用ulimit -n <some number>
来增加当前shell的限制,从而解决用户允许的打开文件数。您选择的数字不能超过在主机上配置的硬限制。您也可以永久地更改ulimit,更详细的here。这是的根本原因修复,但是您更改ulimit
的能力可能受到AWS的限制,因此您可能希望通过调整以下设置来减少mongorestore
进程的并发性:
--numParallelCollections整型 违约:4 应该并行地恢复集合的数量。 --numInsertionWorkersPerCollection整型 违约:1 指定每个集合同时运行的插入工作人员数。
如果为这些值选择了1以外的值,则可以通过如下设置来减少并发性(以及并发打开的文件句柄的数量):
--numParallelCollections=1 --numInsertionWorkersPerCollection=1
当然,这将增加恢复过程的运行时间,但它可能允许您潜入当前配置的ulimit
。不过,只是重申一下;根本原因是增加ulimit
。
https://stackoverflow.com/questions/46026377
复制相似问题