2017-05-27 41 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