2

Node JS サーバー (0.10.30) とそのクラスター機能に取り組んでいます。ワーカーが終了するたびに、「終了」イベントをキャッチし、新しいワーカーを再起動します。例外や致命的なエラーなど、ワーカーが終了した理由も (マスター クラスターで) ログに記録したいと思います。

どうやってするか?

私の app.js ファイルは次のようになります。

var cluster = require('cluster');
var numCPUs = 2;

if (cluster.isMaster) {
  for (var i = 0; i < numCPUs; i++) {
    cluster.fork();
  } 
  
  cluster.on('exit', function(worker, code, signal) {
	console.log('worker %d died. Starting a new worker:', worker.id);
	cluster.fork();
});

} else {
  var domain = require('domain');
  var d = domain.create();
  d.on('error', function(er) {
    console.error('error: ', er.stack);
    // I never get the memory fatal error here 
  });

  d.run(function() {
    // The memory runs out in an async call
  });
}

ありがとう、エレズ

4

1 に答える 1

0

send()ドキュメントで説明されているように、関数を使用してワーカーからマスターにメッセージを送信できます。

http://nodejs.org/api/cluster.html#cluster_worker_send_message_sendhandle

しかし、Node.js の一般的な原則は、意図したとおりに stdout と stderr を使用することconsole.error('whatever you need to say');です。

====コメントに基づいて更新====

ほとんどの場合、プロセスがクラッシュしている場合、それはキャッチされていない例外が原因です。したがって、これらの例外が予想される場合は、適切なオブジェクトでリッスンしてください。予測していないエラーをキャッチするには、プロセスでuncaughtExceptionイベントをリッスンし、そのハンドラーでメッセージまたはコンソールを送信します

于 2014-11-06T16:25:27.240 に答える