使用 MongoDB 聚合管道运行 python 脚本后遇到问题。错误说
errno:24 打开文件太多,完整错误:{'ok': 0.0, 'errmsg': '打开文件“D:\MongoDB\Server .4\data/_tmp/extsort-doc-group.463”时出错” : errno:24 打开文件太多', '代码': 16814, 'codeName': 'Location16814'}
托管 Mongo 数据库的服务器是 Windows Server 2016
当我通过将跨度日从 7 天减少到 3 天来限制数据数量时,问题就消失了,脚本将成功运行并给出结果。
此脚本之前已经运行了几周,设置为 7 天,没有出现问题。
根据 MongoDB 文档here,建议为
open file limit
设置较高的限制。对于 Ubuntu,我们通常通过更改 /etc/security/limits.conf
中特定于用户和限制类型的限制来实现此目的。不同的发行版有不同的方法。要检查限制,简单的 ulimit -a
会非常有帮助。
运行数据库的 IMO 机器应该对打开文件和进程计数有很高的限制。此外,MongoDB 还提供了一系列与要使用的分页和磁盘类型相关的建议。我建议仔细阅读它们以充分发挥 MongoDB 的潜力。
我在 Windows 机器上工作的时间不长,我相信如果您尝试找到如何增加打开文件限制,您会找到它。此外,当您将查询从 7 天减少到 3 天时,wired-tiger 必须访问以获取索引的文件和磁盘操作也减少了,并且它可能允许您运行查询。请注意,与某些数据库不同,mongodb-wiredtiger 中的文件系统组织有点不同。
通过运行检查文件描述符限制:
$ ulimit -a
我的系统打开文件限制的结果:
open files (-n) 4096
要暂时增加当前会话的限制,请使用这个,它对我有用。
$ ulimit -n 8192