簡體   English   中英

Node.js,Express,MongoDB-集群工作者崩潰

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM