2014-11-06 52 views
2

我正在使用Node JS服務器(0.10.30)及其羣集功能。 每次工人終止時,我都會捕獲「退出」事件並重新啓動新的工人。 我也想記錄(在主集羣上)工人被終止的原因,例如例外或致命錯誤。節點JS - 日誌工作者羣集最後一個異常

如何做到這一點?

我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) { 
 
\t console.log('worker %d died. Starting a new worker:', worker.id); 
 
\t 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 
 
    }); 
 
}

感謝, 埃雷茲

回答

0

好了,你可以從工作人員將消息發送到主與send()功能,如文檔中所述:

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

但是Node的一個基本原理是根據預期使用stdout和stderr,所以如果是我的話我可能只是做一個console.error('whatever you need to say');

====基於註釋更新====

在大多數情況下,如果一個進程崩潰,那是因爲未捕獲的異常的。所以,如果你能預料到這些例外情況,請在適當的對象上傾聽他們。爲了趕上你沒有預測錯誤,聽取過程中uncaughtException事件,並在處理

+0

確定發送郵件或控制檯,但我正在尋找一種方式來知道爲什麼工人集羣已墜毀(例如,由於錯誤的內存外的),我無法找到一種方法,它登錄到我的錯誤文件,所以我也不知道在哪裏可以嘗試發送此錯誤的消息發送到主 – 2014-11-07 09:34:42

+0

啊,我明白了。更新了答案 – Paul 2014-11-07 18:28:18