Node Agenda Scheduler Mongo errno:20,代码:'EMFILE'

时间:2015-03-12 09:29:35

标签: node.js mongodb amazon-ec2 scheduler

我正在使用议程运行节点调度程序。它运行良好约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]]

我正在使用部署在EC2实例上的mongo db的节点js。

我写的代码在这里:

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

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:5)

当打开太多文件描述符时会发生EMFILE,因为在进程中打开的描述符数量的操作系统中存在限制。 您可以通过编辑此文件来重置此限制 /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);

我个人认为文件队列是更好的排队系统。