我正在使用议程运行节点调度程序。它运行良好约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
任何帮助都将不胜感激。
答案 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);
我个人认为文件队列是更好的排队系统。