[英]Node.js, Express, MongoDB - cluster worker crashes
我的問題是,當我按下快速路線時,集群中的一個工作程序崩潰了。
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);
}
您可能想嘗試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參數(即:“ multithread-keepalive”)運行它:
$ jxcore mt-keep:4 worker.js
數字4
表示4 cores
-請更改它以適合您的平台。
請注意,我沒有對其進行測試。 我只是展示了多進程集群的替代方案。 同樣,根據實現的不同,JXcore可能更加高效。
有一年的老文章,重點介紹了JXcore和Node.JS之間的性能差異: JXcore vs Vert.x vs Node.JS Cluster 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.