节点议程调度程序 Mongo 错误号:20,代码:'EMFILE'

Node Agenda Scheduler Mongo errno: 20, code: 'EMFILE'

我是 运行 使用议程的节点调度程序。它运行正常大约 30 分钟,然后开始显示此错误。

{ [Error: EMFILE, open 'log/scheduler.log'] errno: 20, code: 'EMFILE', path: 'log/scheduler.log' }
{ [Error: EMFILE, open 'log/scheduler.log'] errno: 20, code: 'EMFILE', path: 'log/scheduler.log' }
[Error: failed to connect to [localhost:27017]]
[Error: failed to connect to [localhost:27017]]
[Error: failed to connect to [localhost:27017]]
[Error: failed to connect to [localhost:27017]]
[Error: failed to connect to [localhost:27017]]

我正在使用节点 js 和 mongo 部署在 EC2 实例上的数据库。

我写的代码在这里:

https://github.com/kelvinblade/bluesky-scheduler2

如有任何帮助,我们将不胜感激。

EMFILE 当打开的文件描述符太多时发生,因为 os 对进程打开的描述符数量有限制。 您可以通过编辑此文件来重置此限制 /etc/sysctl.conf 或者更优雅的方法是使用一些模块来照顾并有一个连接池来监视打开的文件描述符。 您可以尝试 node-graceful-fs 或 filequeue Git 来源:

 https://github.com/isaacs/node-graceful-fs

 https://github.com/treygriffith/filequeue.git 

通过

安装适当的节点模块
     npm install node-graceful-fs
       or
     npm install filequeue

并将您的 fs 从默认值替换为

  var fs = require('graceful-fs')
    or
  var fs = new FileQueue(100);

个人感觉 filequeue 是更好的排队系统。