Node.js:限制集群中的分叉

Node.js:限制集群中的分叉,node.js,Node.js,我有一个Web应用程序和一个在后台运行的应用程序,这最后加载了很多服务器,到目前为止一直工作正常,但在最后一个版本中添加了新功能,承载了很多负载并阻塞了服务器 我一直试图修改运行集群的代码,但总是加载相同数量的进程 这是我的代码: var cluster = require('cluster'), limitWorkers = Math.ceil(require('os').cpus().length / 2), jobWorkers = [], webWorkers =

我有一个Web应用程序和一个在后台运行的应用程序,这最后加载了很多服务器,到目前为止一直工作正常,但在最后一个版本中添加了新功能,承载了很多负载并阻塞了服务器

我一直试图修改运行集群的代码,但总是加载相同数量的进程

这是我的代码:

var cluster = require('cluster'),
    limitWorkers = Math.ceil(require('os').cpus().length / 2),
    jobWorkers = [],
    webWorkers = [];

if(cluster.isMaster) {

    //let limit = 0;

    require('os').cpus().forEach(function() {

        addWebWorker();

        /*if(limit < limitWorkers) {

            limit++;

            addJobWorker();
        }*/
        if( limitWorkers > 0 ) {

            --limitWorkers;

            addJobWorker();
        }
    });

    cluster.on('exit', function(worker, code, signal) {

        if (jobWorkers.indexOf(worker.id) != -1) {

            console.log('job worker ' + worker.process.pid + ' died. Trying to respawn...');

            removeJobWorker(worker.id);

            addJobWorker();
        }

        if (webWorkers.indexOf(worker.id) != -1) {


            console.log('http worker ' + worker.process.pid + ' died. Trying to respawn...');

            removeWebWorker(worker.id);

            addWebWorker();
        }
    });

} else {

    console.log('start http server: ' + cluster.worker.id);
    require('./apps/web-http'); //initialize the http server here

    //if( process.env.job === 1 ){
    if( jobWorkers.indexOf(cluster.worker.id) != 1 ) {

        //if( limitWorkers > 0 ) { 

            //limitWorkers--;

            console.log('start job server: ' + cluster.worker.id);
            require('./apps/jobs-worker'); //initialize the job here
        //}
    }
}

function addWebWorker() {

    webWorkers.push(cluster.fork({web: 1}).id);
}

function addJobWorker() {

    jobWorkers.push(cluster.fork({job: 1}).id);
}

function removeWebWorker(id) {

    webWorkers.splice(webWorkers.indexOf(id), 1);
}

function removeJobWorker(id) {

   jobWorkers.splice(jobWorkers.indexOf(id), 1);
}
var cluster=require('cluster'),
limitWorkers=Math.ceil(要求('os').cpu().length/2),
工作人员=[],
网络工作者=[];
if(cluster.isMaster){
//设极限=0;
require('os').cpus().forEach(function(){
addWebWorker();
/*如果(限制<限制工人){
极限++;
addJobWorker();
}*/
如果(限制工人>0){
--限制工人;
addJobWorker();
}
});
集群打开('exit',功能(工作者、代码、信号){
if(jobWorkers.indexOf(worker.id)!=-1){
log('job worker'+worker.process.pid+'已死亡。正在尝试重生…');
removeJobWorker(worker.id);
addJobWorker();
}
if(webWorkers.indexOf(worker.id)!=-1){
log('http worker'+worker.process.pid+'已死亡。正在尝试重新启动…');
removeWebWorker(worker.id);
addWebWorker();
}
});
}否则{
log('启动http服务器:'+cluster.worker.id);
require('./apps/web http');//在此处初始化http服务器
//if(process.env.job==1){
if(jobWorkers.indexOf(cluster.worker.id)!=1){
//如果(limitWorkers>0){
//有限工人--;
console.log('start job server:'+cluster.worker.id);
require(“./apps/jobs worker”);//在此处初始化作业
//}
}
}
函数addWebWorker(){
push(cluster.fork({web:1}).id);
}
函数addJobWorker(){
push(cluster.fork({job:1}).id);
}
函数removeWebWorker(id){
拼接(webWorkers.indexOf(id),1);
}
函数removeJobWorker(id){
jobWorkers.splice(jobWorkers.indexOf(id),1);
}

有没有办法让job worker运行处理器一半或一个内核?谢谢。

请用文字描述您试图通过修改代码来完成的任务。我们需要知道目标是什么。@jfriend00我需要“job worker”运行单个进程或处理器的一半核心。到目前为止,按核心运行进程,与Web服务器相同,因此我阻止了计算机。