我在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个数据点。
答案 0 :(得分:1)
问题似乎与MongoDB的安装有关。我使用的是Debian 9并使用apt-get
来安装与操作系统捆绑在一起的MongoDB版本。
由于MongoDB文档说它还不支持Debian 9,所以将操作系统降级到Debian 8并按照documentation安装了MongoDB社区版。它现在运作良好:))