コードを使用してnode.jsプロセスのCPU使用率を調べる方法はありますか?そのため、node.jsサーバーが実行されていて、CPUが特定の%を超えていることを検出すると、アラートまたはコンソール出力が表示されます。
このコードを見てください: https://github.com/last/healthjs
リモートシステムのCPUを取得し、CPU使用率のアラートを受信するためのネットワークサービス...
Health.jsは、「ストリーミングモード」と「イベントモード」の2つの主要なモードを提供します。ストリーミングモードでは、クライアントがストリーミングCPU使用状況データに接続して受信できます。イベントモードでは、CPU使用率が特定のしきい値に達したときにHealth.jsがリモートサーバーに通知できるようにします。両方のモードを同時に実行できます...
* 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);
これでosモジュールを使用できます。
var os = require('os');
var loads = os.loadavg();
これにより、過去60秒、5分、15分の負荷平均が得られます。ただし、これはCPU使用率を%として提供しません。
プロセスのCPUとメモリの使用状況(システムではない)の追跡については node-usage を参照してください
ノード 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);
別のオプションは node-red-contrib-os パッケージを使用することです