不同核心上的node.js的多个实例

时间:2013-07-30 14:34:29

标签: javascript node.js webserver

我想设置4个不同的node.js实例,每个实例都在自己的核心上。 node.js是否在同一个核心上堆叠新实例,或者也将它们设置在新核心上?

实例不相关并单独接收请求。我希望cpu负载均匀分布。 我无法找到这个问题的明确答案。

2 个答案:

答案 0 :(得分:7)

一般情况下,系统会尝试自己动手,以最大限度地利用cpu。但是,如果要定位特定CPU,则应查看TaskSet。它设定了这个过程的亲和力。

还有几个讨论相同主题的有用问题。看看。

  1. Upstart: each process on different core Nodejs

  2. Node.js - targeting a cpu core

  3. Node.js on multi-core machines

  4. In AmazonEC2 cpu core and nodejs

  5. How to deploy Node.js in cloud for high availability using multi-core

  6. Multi node modlue to utilize cpu

  7. 还有一个模块Cluster,它对CPU利用率也非常有用。它允许您分叉多个进程以将负载分配给多个核心。


    <强>更新


    最后,根据OP,我已经部署了类似的东西。


    案例1。


    1. 我有一个拥有8个cpu内核的专用服务器。
    2. 我已部署单个节点线程并使用群集模块来共享工作负载(如pl47ypus PS所述:感谢他的回答)。
    3. 结果很好,但有时候子线程可能没有响应,所以我决定尝试旧的过程,我在之前的应用程序中使用过。

    4. 案例2。


      1. 相同的服务器,我已经部署了8个具有不同端口的node.js进程。
      2. 然后我将nginx放在这些前面,用工作进程8监听端口80。
      3. 结果优于案例1,并且非常容易配置nginx,也是最稳定的。
      4. 我还建议您尝试一些上面提到的解决方案,并在每种情况下继续监控您的系统;像CPU,内存使用和io。最后,从您的测试中,您将看到针对您的用例的最佳解决方案。每个应用程序都有自己的要求,因此最好尝试查找应用程序真正需要的内容。

答案 1 :(得分:0)

试试这个:

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

if(cluster.isMaster) {
  // Fork workers.
  for (var i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on('exit', function(worker, code, signal) {
    console.log('worker ' + worker.pid + ' died');
  });

  return;
}

完整代码here

另外,看here