繁体   English   中英

如何在集群中使用sails(使用更多内核)?

[英]How to use sails with cluster (to use more cores)?

我正在尝试使用cluster库启动sails.js应用程序以允许它生成更多进程以使用我的机器的所有核心,但不知何故,使用express的方法在这里失败。

var cluster = require('cluster'),
    numCPUs = require('os').cpus().length;

// create the server 
if (cluster.isMaster) {
  for (var i = 0; i < numCPUs; i++) {
    cluster.fork();
  }
  cluster.on('exit', function(worker, code, signal) {
    console.log('worker %d died (%s). restarting...', worker.process.pid, signal || code);
    cluster.fork();
  });
} else {
  // Start sails and pass it command line arguments
  require('sails').lift(require('optimist').argv);
  console.log("Sails forked");
}

之后我通常通过以下方式运行它:

$ sails lift

但是当我为这个性能测试运行apache bench时,我得到了相同的结果。 有帮助吗? 我错过了什么吗?

编辑

即使我将console.log放在cluster.fork如果是part,那么我也没有得到输出。

最后我使用了pm2模块 ,如在一个sails问题中提到的那样https://github.com/balderdashy/sails/issues/170

首先应该安装它:

$ npm install -g pm2

然后运行脚本:

$ pm2 start app.js -i max

然后你可以用以下方法监控它:

$ pm2 monit

在此输入图像描述

或列出进程:

$ pm2 l

在此输入图像描述

试试这个,看看你的输出是什么(很简单的代码只是为了调试):

var cluster = require('cluster'),
    numCPUs = require('os').cpus().length;
console.log('global '+numCPUs);

// create the server 
if (cluster.isMaster) {
    console.log('master '+numCPUs);
    for (var i = 0; i < numCPUs; i++) {
        console.log('this is for CPU '+i);
        cluster.fork();
        console.log('just for giggles '+i);
    }
}
else {
    console.log('This is a worker!');
}

...大概你应该得到所有这些电话的输出。 如果一切都如预期的那样,开始逐步添加代码,看看它是否中断,在哪里,或者它是否开始工作。

如果您错过了某些输出或某些意外情况,并且您仍然不知道下一步该做什么,请在此处发布您的结果。

这是我的开发服务器的预期输出示例:

global 8
master 8
this is for CPU 0
just for giggles 0
this is for CPU 1
just for giggles 1
this is for CPU 2
just for giggles 2
this is for CPU 3
just for giggles 3
this is for CPU 4
just for giggles 4
this is for CPU 5
just for giggles 5
this is for CPU 6
just for giggles 6
this is for CPU 7
just for giggles 7
global 8
This is a worker!
global 8
This is a worker!
global 8
This is a worker!
global 8
global 8
This is a worker!
This is a worker!
global 8
This is a worker!
global 8
This is a worker!
global 8
This is a worker!

...它演示了一些有趣的事情,实际上,如果你不熟悉集群的API或者只是想看到它的运行,特别是cluster.fork()是一个异步调用(即它不会执行,直到下一个循环,因此为什么你没有开始看到工人们宣布自己,直到他们全部分叉后),但那个子进程一旦产生,将并行执行(因此global 8This is a worker!的倍增This is a worker!中间的消息)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM