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 に答える