Node.js spawn EMFILE

Node.js spawn EMFILE,node.js,child-process,Node.js,Child Process,我正在尝试在节点作业中使用ChildProcess.exec在async.forEach循环中运行命令。这是密码 async.forEach( docPaths, function(docPath, callback) { var run = []; // some command using docPath variable here.. run.push(command); debugger; exec(run.join(' '), function(error, stdout,

我正在尝试在节点作业中使用ChildProcess.exec在async.forEach循环中运行命令。这是密码

async.forEach( docPaths, function(docPath, callback) { 
 var run = [];
 // some command using docPath variable here..
 run.push(command);
debugger;
 exec(run.join(' '), function(error, stdout, stderr){
    callback();
  });
 }, callback);
这里是错误

"stack":"Error: spawn EMFILE\
at errnoException (child_process.js:478:11)\
at ChildProcess.spawn (child_process.js:445:11)\
at child_process.js:343:9\
at Object.execFile (child_process.js:253:15)\
at child_process.js:220:18\
快速谷歌显示我需要设置ulimit值以增加可以打开的文件描述符的数量。像“ulimit-n1000”之类的东西。。(来自下面的链接)

我在哪里可以增加这个。。?或者有没有其他解决办法来回避这个问题


谢谢你的帮助。。多谢

首先,不建议与ulimit为伍,因为它可能会对整个系统产生影响

相反,因为您已经在使用async,所以它附带了一个用于限制并行执行次数的函数

async.eachLimit( docPaths, 100, function(docPath, callback) { 
 var run = [];
 // some command using docPath variable here..
 run.push(command);
debugger;
 exec(run.join(' '), function(error, stdout, stderr){
    callback();
  });
 }, callback);

请尝试和错误,并用适当的值替换100。

据我所知,ULIMIT文件描述符被设置为纯粹地跟踪经典C++应用程序中的FD泄漏。因此,对于节点应用程序,将ulimit设置为unlimited应该是安全的,因为它在异步世界中没有多大意义。@alex,将ulimit设置为unlimit是不安全的,请参阅查看结果。.我已经尝试了每个limit和每个hseries来通过错误。这两个人中的任何一个对我来说都很好。虽然每个系列不能同时处理,但它解决了我遇到的问题。谢谢much@Sriharsha,这篇文章是关于最大用户进程(-u),我们谈论的是打开的文件(-n),这是另一回事。