Подтвердить что ты не робот

Node js cpu 100%

У нас возникает проблема, когда время от времени в нашей среде наше приложение node работает на 100% процессоре. Сервер не очень активен и обычно работает на 0% -2% CPU. Мне было интересно, какие общие проблемы могут вызвать эту проблему, и что будет лучшим способом выяснить, что вызывает эту проблему.

Спецификации сервера:

node версия 0.8.14
ubuntu 11.10
Intel (R) Xeon (R) CPU E5645 @2,40 ГГц

node используемые пакеты:

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

Ответ 1

Вы можете профилировать свое приложение с помощью node-tick.

  • Установите node-tick на sudo npm -g install tick
  • Запустите приложение с включенным профилем node --prof ./app.js
  • Через некоторое время с использованием 100% -ного использования ПК прекратите свое приложение.
  • Вы можете увидеть v8.log в своем каталоге приложений, теперь вы можете прочитать его с помощью node -tick-processor
  • Запустите node-tick-processor и объясните результаты

Ответ 2

ОБНОВЛЕНИЕ 2019 !!

Вам лучше использовать встроенный --prof-process для обработки данных профилирования v8, сгенерированный файл больше не является v8.log, и node-tick-processor вам не сильно поможет, так что для профилирования вашего приложения и чтения данных профилирования v8 Вы можете действовать следующим образом:

node --prof your_script.js

Узел сгенерирует файл с именем, подобным этому isolate-0x103800000-v8.log в вашем текущем каталоге, теперь вы используете этот файл для генерации отчета о профилировании.

node --prof-process isolate-0x103800000-v8.log > processed.txt

Простое профилирование

Ответ 3

вот что я нашел:

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

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