2013-07-30 29 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進程集羣來處理負載」因此,請確實讀取事情「,它對於啓動多個相同過程的實例來平衡負載「 –

相關問題