2017-05-27 68 views
2

当在多核处理器集群的NodeJS I usually see examples saying -的NodeJS - 集群工人的最佳数量

const numCPUs = require('os').cpus().length; 
for (let i = 0; i < numCPUs; i++) { 
    cluster.fork(); 
    } 

我的问题是 -

  1. 如果多核处理器上运行的网络应用程序与反向代理终止SSL(CPU密集型),gzipping(CPU密集型)和做其他的东西+还有其他服务器做主要nodejs服务器的CPU密集型工作,是产生尽可能多的工人作为CPU核心(对于主节点服务器)?

  2. 应该运行哪些测试来找出最佳工人数量?

+0

由于您没有提供任何关于您的任何流程在任何特定负载下的CPU需求方面的定量数据,因此如果不设计代表性的负载测试并以几个不​​同的数量运行它,则无法回答您的问题nodejs最多可处理numCPU,并查看哪个能够为您提供最佳的整体吞吐量。即使你有一些有意义的定量数据,你仍然可能需要运行测试来验证你的决定。 – jfriend00

+1

一对夫妇太多的过程可能不足以解决问题。没有足够的空间留给你CPU和完全浪费的容量。太多的进程只是增加了几个上下文切换来交换它们之间的CPU。 – jfriend00

+0

我在过去的生产中使用我的答案中找到的信息实现了这个确切的事情。如果您还有其他问题,请告诉我。它被@ jfriend00降低了,但我可以向你保证这个解决方案确实有效,而且生产力强劲。 – arboreal84

回答

-2
  1. 你可以set an affinity for the process to a set of cores

  2. 每个核心可用核心应该有一名工作人员。通过可用核心,我的意思是不会被其他进程大量使用的核心。

为了确保一切都很好,你(CPU load/number of cores)应低于1

尽量提供您的机器拥有很少的不同的服务/进程。这可能起初看起来很浪费,但它通过限制级联故障的影响来帮助MMTD和MMTR处理事故。

注意:这个问题通常在Server Fault,另一个Stack Exchange站点上更好。

+0

这似乎无法回答OP要求的任何问题。他们的问题是关于在同一主机上运行的其他进程大量使用CPU的情况。问题是如何优化总吞吐量,而不仅仅是nodejs的工作。 – jfriend00

+0

如果可能的话,我会建议让每个节点进程都处于独占核心。 – arboreal84

+0

OP在询问有多少个nodejs进程以集群形式运行。操作系统将决定亲和力。当服务器上发生很多其他事情时,不能只将所有CPU都提供给nodejs。 – jfriend00