尝试使用1亿多个文档移动MongoDB数据库。将其从AWS中的服务器移动到GCP中的服务器。尝试mongodump
- 虽然有效,但mongorestore
仍然存在错误 -
error running create command: 24: Too many open files
如何做到这一点?
不想通过在AWS服务器上创建脚本来转移,以获取每个文档并推送到GCP服务器上的API端点,因为这需要太长时间。
编辑(添加更多细节)
已经尝试将ulimit -n
设置为无限制。由于GCP具有无法修改的硬编码限制,因此无法正常工作。
答案 0 :(得分:0)
您似乎正在为您的用户点击ulimit
。这可能是以下部分或全部的功能:
ulimit
(可能是256或1024,具体取决于操作系统)mongorestore
的方式可以增加并发性,从而增加并发打开的文件句柄数您可以通过调用ulimit -n <some number>
来增加当前shell的限制,以解决用户允许的打开文件数。您选择的号码不能超过主机上配置的硬限制。您还可以永久更改ulimit,更多详细信息here。这是根本原因修复,但您更改ulimit
的能力可能受AWS限制,因此您可能希望考虑降低mongorestore
进程的并发性通过调整以下设置:
- numParallelCollections int
默认值:4
mongorestore应该并行恢复的集合数量。
- numInsertionWorkersPerCollection int
默认值:1
指定每个集合并发运行的插入工作器数。
如果您为1以外的其他值选择了值,则可以通过如下设置来减少并发性(以及因此并发打开的文件句柄数):
--numParallelCollections=1 --numInsertionWorkersPerCollection=1
当然,这会增加恢复过程的运行时间,但它可能允许您潜入当前配置的ulimit
。虽然,只是重申;根本原因修复是增加ulimit
。