web-dev-qa-db-ja.com

Node.jsプロセスの%CPU使用率を調べる方法は?

コードを使用してnode.jsプロセスのCPU使用率を調べる方法はありますか?そのため、node.jsサーバーが実行されていて、CPUが特定の%を超えていることを検出すると、アラートまたはコンソール出力が表示されます。

20
murvinlai

このコードを見てください: https://github.com/last/healthjs

リモートシステムのCPUを取得し、CPU使用率のアラートを受信するためのネットワークサービス...

Health.jsは、「ストリーミングモード」と「イベントモード」の2つの主要なモードを提供します。ストリーミングモードでは、クライアントがストリーミングCPU使用状況データに接続して受信できます。イベントモードでは、CPU使用率が特定のしきい値に達したときにHealth.jsがリモートサーバーに通知できるようにします。両方のモードを同時に実行できます...

17
CrazyDart

* nixでは、システムは/ proc/[pid]/stat仮想ファイルを読み取ることでプロセス統計を取得できます。

たとえば、これは10秒ごとにCPU使用率をチェックし、20%を超えている場合はコンソールに出力します。これは、プロセスで使用されるCPUティック数をチェックし、その値を1秒後に行われた2番目の測定値と比較することで機能します。違いは、その秒の間にプロセスによって使用されたティックの数です。 POSIXシステムでは、1秒あたり(プロセッサあたり)10000ティックであるため、10000で割るとパーセンテージになります。

var fs = require('fs');

var getUsage = function(cb){
    fs.readFile("/proc/" + process.pid + "/stat", function(err, data){
        var elems = data.toString().split(' ');
        var utime = parseInt(elems[13]);
        var stime = parseInt(elems[14]);

        cb(utime + stime);
    });
}

setInterval(function(){
    getUsage(function(startTime){
        setTimeout(function(){
            getUsage(function(endTime){
                var delta = endTime - startTime;
                var percentage = 100 * (delta / 10000);

                if (percentage > 20){
                    console.log("CPU Usage Over 20%!");
                }
            });
        }, 1000);
    });
}, 10000);
27
Zack Bloom

これでosモジュールを使用できます。

var os = require('os');
var loads = os.loadavg();

これにより、過去60秒、5分、15分の負荷平均が得られます。ただし、これはCPU使用率を%として提供しません。

7
Garrows

プロセスのCPUとメモリの使用状況(システムではない)の追跡については node-usage を参照してください

7

ノード process.cpuUsage 関数を使用します(ノードv6.1.0で導入)。 cpuがノードプロセスに費やした時間を示します。ドキュメントからの例:

const previousUsage = process.cpuUsage();
// { user: 38579, system: 6986 }

// spin the CPU for 500 milliseconds
const startDate = Date.now();
while (Date.now() - startDate < 500);

// At this moment you can expect result 100%
// Time is *1000 because cpuUsage is in us (microseconds)
const usage = process.cpuUsage(previousUsage);
const result = 100 * (usage.user + usage.system) / ((Date.now() - startDate) * 1000) 
console.log(result);

// set 2 sec "non-busy" timeout
setTimeout(function() {
    console.log(process.cpuUsage(previousUsage);
    // { user: 514883, system: 11226 }    ~ 0,5 sec
    // here you can expect result about 20% (0.5s busy of 2.5s total runtime, relative to previousUsage that is first value taken about 2.5s ago)
}, 2000);
4
fider

別のオプションは node-red-contrib-os パッケージを使用することです