2015-04-16 91 views
0

我的問題是當我打開一條快速路由時,羣集崩潰中的工作人員之一。Node.js,Express,MongoDB - 羣集工作者崩潰

4個工人:

API started on port 8000 
API started on port 8000 
API started on port 8000 
API started on port 8000 

然後我瀏覽到http://localhost:8000

worker 1 has died :(

工人死亡後,整個集羣變得反應遲鈍。 當我只使用一個cpu時它工作正常。

server.js

var cluster = require('cluster'); 


if(cluster.isMaster){ 

    var cpuCount = require('os').cpus().length; 

    // Create a worker for each CPU 
    for (var i = 0; i < cpuCount; i += 1) { 
     cluster.fork(); 
    } 

    cluster.on('exit', function(worker) { 
     console.log('worker:' + worker.id + " is dead"); 
     cluster.fork(); 
    }); 

} else { 
    var init = require('./config/init')(); 
    var config = require('./config/config'); 
    var mongoose = require('mongoose'); 
    var chalk = require('chalk'); 

    var db = mongoose.connect(config.db, function(err) { 
     if (err) { 
      console.error(chalk.red('Could not connect to MongoDB!')); 
      console.log(chalk.red(err)); 
     } 
    }); 

    var app = require('./config/express')(db); 

    app.listen(config.port); 

    require('./config/passport')(); 

    console.log('API started on port ' + config.port); 
} 
+0

當工人死亡時,記錄退出/信號代碼可能是值得的。請參閱[精細手冊](https://nodejs.org/api/cluster.html#cluster_event_exit)。 – robertklep

回答

0

你可能想嘗試JXcore,它支持多任務處理(單個進程下的線程/實例)。由於這個原因,集羣不再需要。誰知道,也許這對你會更好。

所以我們說,你花一點點的工人代碼(我只是將其粘貼在這裏沒有任何改變):

var init = require('./config/init')(); 
var config = require('./config/config'); 
var mongoose = require('mongoose'); 
var chalk = require('chalk'); 

var db = mongoose.connect(config.db, function(err) { 
    if (err) { 
    console.error(chalk.red('Could not connect to MongoDB!')); 
    console.log(chalk.red(err)); 
    } 
}); 

var app = require('./config/express')(db); 
app.listen(config.port); 
require('./config/passport')(); 
console.log('API started on port ' + config.port); 

,然後你mt-keep參數運行它(意思是:「多線程存活」) :

$ jxcore mt-keep:4 worker.js 

數量爲4 cores4狀態 - 請更改爲適合您的平臺。

請注意,我沒有測試它。我只是展示了多進程集羣的替代方案。另外,根據實現情況,JXcore可能更加高效。

有一篇爲期一年的文章,重點介紹JXcore和Node.JS之間的性能差異:JXcore vs Vert.x vs Node.JS Cluster