7

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

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

4

2 回答 2

7

一般系统会尽量自己做这个,最大限度的利用cpu。但是,如果您想针对特定的 CPU,您应该查看TaskSet。它设置了过程的亲和力。

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

  1. 新贵:不同核心 Nodejs 上的每个进程

  2. Node.js - 以 CPU 核心为目标

  3. 多核机器上的 Node.js

  4. 在 AmazonEC2 cpu core 和 nodejs

  5. 如何使用多核在云中部署 Node.js 以实现高可用性

  6. 使用 cpu 的多节点模块

还有一个模块Cluster对 CPU 利用率也非常有用。它让您分叉多个进程以将负载分配到多个内核。


更新


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


情况1。


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

案例 2。


  1. 同一台服务器,我已经部署了 8 个不同端口的 node.js 进程。
  2. 然后我把 nginx 放在这些前面,用工作进程 8 监听端口 80。
  3. 结果比案例 1 最好,而且它非常容易配置 nginx ,它也是最稳定的。

我还建议您尝试一些提到的解决方案,并在每种情况下继续监控您的系统;比如 CPU、内存使用和 io。最后,从您的测试中,您将看到最适合您的用例的解决方案。每个应用程序都有自己的要求,因此最好尝试找到您的应用程序真正需要的内容。

于 2013-07-30T14:48:30.837 回答
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;
}

完整代码在这里

还有,看这里

于 2013-07-30T15:43:13.803 回答