2013-07-30 26 views
6

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

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

+0

你能请添加要实现的方案的一些细节? –

+0

@VivekBajpai我有4个nodejs服务器永远运行,在高峰时间每个人都可能会经历沉重的负载,我认为让他们每个人都设置到自己的核心将有助于在高峰时间。 – GameDevGuru

+0

您是否在像EC2或专用真实服务器这样的虚拟服务器中运行它? –

回答

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

还有一个模块,Cluster,其也可以是用于CPU利用率非常有用的。它让你分叉多个进程分配负载到多个核心。


UPDATE


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


案例1.


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

病例2


  1. 同一台服务器,我已经部署的Node.js的8个进程具有不同的端口。
  2. 然后我把nginx的在前面这些,监听端口80与工作进程8.
  3. 结果是最好比1的情况下,也它很容易配置nginx的,其最稳定的了。

我还建议你只是尝试一些提到的解决方案,并在每种情况下继续监视你的系统;如CPU,内存使用情况和io。最后,从您的测试中,您将看到针对您的用例的最佳解决方案。每个应用程序都有自己的要求,所以最好能够尝试找到你的应用程序真正需要的东西。

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

+1

你有没有读过这个问题,它不问如何在nodejs中执行多线程,它询问如何在不同的核心上运行不同的节点进程实例。那么使用集群有用吗? –

+0

这是来自nodejs api文档的引用“群集模块允许您轻松创建一个全部共享服务器端口的进程网络。”你想通过同一个端口访问所有进程吗? (http://nodejs.org/api/cluster.html#cluster_cluster) – pl47ypus

+0

首先集群模块是在http://nodejs.org/api/cluster.html#cluster_cluster doc开头明确提及的实验性第二件事情“一个节点的单个实例运行在一个单独的线程中,为了利用多核系统,用户有时需要启动一个Node进程集群来处理负载”因此,请确实读取事情“,它对于启动多个相同过程的实例来平衡负载“ –

相关问题