2012-11-14 118 views
25

我們遇到了一個問題,即每隔一段時間我們的環境中的一個節點應用程序在100%的CPU上運行。服務器不是非常活躍,通常運行在0%-2%的CPU上。 我想知道什麼是可能導致此問題的常見問題,以及找出導致此問題的最佳方法是什麼。節點js cpu 100%

服務器規格:

節點版本0.8.14
的ubuntu 11.10
英特爾(R)至強(R)CPU E5645 @ 2.40GHz的

節點封裝中使用:

"express" : 2.5.x, 
"log" : "1.2.x", 
"redis" : "0.8.x", 
"socket.io" : "0.9.x", 
"mongodb": ">= 0.9.6-7", 
"passport" : "0.x.x", 
"passport-local" : "0.x.x", 

回答

30

你可以用node-tick來分析你的應用。

  1. 通過sudo npm -g install tick
  2. 安裝node-tick啓用輪廓node --prof ./app.js
  3. 運行你的應用程序一段時間後與CPU 100%使用率停止你的應用程序
  4. 您可以在您的應用程序目錄中看到v8.log,現在你可以與節點蜱處理器讀它
  5. 運行node-tick-processor和解釋結果
+0

小心使用NPM作爲根(即sudo npm)閱讀這裏的討論:http://stackoverflow.com/questions/16151018/npm-throws-error-without-sudo – Keith

+0

哦,男人,這幫助我發現,我刪除了一個模塊,同時也要求在一個服務。好悲傷。 –

-2

這是我發現:

#!/usr/bin/env node 

require(__dirname+"/processor-usage.js").startWatching(); 

var shouldRun = true; 
var desiredLoadFactor = .5; 

function blockCpuFor(ms) { 
    var now = new Date().getTime(); 
    var result = 0 
    while(shouldRun) { 
     result += Math.random() * Math.random(); 
     if (new Date().getTime() > now +ms) 
      return; 
    } 
} 

function start() { 
    shouldRun = true; 
    blockCpuFor(1000*desiredLoadFactor); 
    setTimeout(start, 1000* (1 - desiredLoadFactor)); 
} 

setInterval(function() { 
    console.log("current process cpu usage: "+(global.processCpuUsage || 0)+"%");} 
, 1000); 

if (process.argv[2]) { 
    var value = parseFloat(process.argv[2]); 
    if (value < 0 || value > 1) { 
     console.log("please give desired load value as a range [0..1]"); 
    process.exit(-1); 
    } else { 
     desiredLoadFactor = value; 
    } 
} 
start(); 

http://blackholethought.blogspot.de/2012/08/measuring-cpu-usage-of-nodejs-from.html