5

我正在尝试在我的节点作业中使用 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 -n 10000”之类的东西..(来自下面的链接)

https://groups.google.com/forum/#!topic/nodejs/jeec5pAqhps

我在哪里可以增加这个..?或者有没有其他解决方案来规避这个问题?

感谢您的帮助.. 非常感谢!

4

1 回答 1

8

首先,不建议使用 ulimit,因为它可能会产生系统范围的影响。

相反,由于您已经在使用异步,它带有一个限制参数,您可以使用它来限制并行执行的数量。

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 替换为合适的值。

于 2013-10-02T21:04:47.090 回答