在mongodb中插入文档时出现“太多打开文件”错误

时间:2017-09-10 19:51:38

标签: python mongodb

我在Mongo创建了一个较大的(80k集合,每个集合200k文档)数据库。当我开始将文档推入数据库时​​,在插入~800k之后我不断收到以下错误。

pymongo.errors.WriteError: 24: Too many open files

我有一个体面的服务器(2个vCPU,32 GB RAM)。文件打开的ulimit设置为无限制。 limit nofile 999999 999999在/etc/init/mongodb.conf中设置。

我已经尝试在文件插入脚本中插入sleep(希望mongodb稍后会关闭文件),但这也没有帮助。唯一有效的方法是在插入失败后重启Mongodb。然后该过程可以恢复。

如何在不必每隔几千次插入并重新启动mongodb后暂停插入过程就能使插入过程更好?

共享将数据点从redis传输到mongo的Python脚本

while (redis_conn.llen(redis_key) > 0) :
            redis_json = redis_conn.lpop(redis_key)
            json_doc = json.loads(redis_point)
            collection_name = json_doc['collection_name']
            collection = mongodb[collection_name]
            document = { '1' : json_doc['1'], '2' : json_doc['2'] }
            mongo_write_response = collection.insert_one(document)

(为简洁起见,我简化了文件。实际文件有大约20个数据点。

1 个答案:

答案 0 :(得分:1)

问题似乎与MongoDB的安装有关。我使用的是Debian 9并使用apt-get来安装与操作系统捆绑在一起的MongoDB版本。

由于MongoDB文档说它还不支持Debian 9,所以将操作系统降级到Debian 8并按照documentation安装了MongoDB社区版。它现在运作良好:))