34

たまに、ノードアプリが100%CPUで実行されている環境の1つで問題が発生しています。サーバーはあまりアクティブではなく、通常は0%〜2%のCPUで実行されます。この問題を引き起こす可能性のある一般的な問題は何であり、この問題の原因を見つけるための最良の方法は何でしょうか。

サーバーの仕様:

ノードバージョン0.8.14ubuntu11.10
Intel
(R)Xeon(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",
4

5 に答える 5

38

node-tickを使用してアプリのプロファイルを作成できます。

  1. node-tickによってインストールnpm -g install tick
  2. プロファイルを有効にしてアプリを実行するnode --prof ./app.js
  3. CPUを100%使用した後、アプリを停止します
  4. あなたはあなたのアプリディレクトリでv8.logを見ることができます、今あなたはそれをnode-tick-processorで読むことができます
  5. 結果を実行node-tick-processorして説明する
于 2012-11-14T09:39:05.187 に答える
-1

これは私が見つけたものです:

    #!/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 _

于 2012-12-30T22:53:47.500 に答える