2012-11-14 20 views
25

Mamy problem, gdzie co jakiś czas w jednym z naszych środowisk nasza aplikacja węzłowa działa na procesorze 100%. Serwer nie jest bardzo aktywny i zwykle działa na procesorze 0% -2%. Zastanawiam się, jakie są typowe problemy, które mogą powodować ten problem i jaki byłby najlepszy sposób, aby dowiedzieć się, co powoduje ten problem.węzeł js cpu 100%

specyfikacje Server:

wersja węzeł 0.8.14
Ubuntu 11.10
Intel (R) Xeon (R) CPU E5645 @ 2.40GHz pakiety

węzłów używanych:

"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", 

Odpowiedz

30

Możesz profilować swoją aplikację pod numerem node-tick.

  1. Install node-tick przez sudo npm -g install tick
  2. Uruchom aplikację z włączonym profilem node --prof ./app.js
  3. Po pewnym czasie z procesora 100% użycia zatrzymać aplikacja
  4. Widać v8.log w katalogu aplikacji, teraz można go odczytać z węzła-tick-procesorem
  5. Uruchom node-tick-processor i wyjaśnić wyniki
+0

Bądź ostrożny używając NPM jako root (czyli sudo npm.) Przeczytaj dyskusję tutaj: http://stackoverflow.com/questions/16151018/npm-throws-error-without-sudo – Keith

+0

Oh man, to pomogło mi odkryć, że usunąłem moduł, jednocześnie wymagając go w usłudze . O jeny. –

-2

to co znalazłem:

#!/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(); 

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