有没有一种方式可以通过代码找出 Node.js 进程的 CPU 使用率。这样,当 Node.js 应用程序在服务器上运行并检测到 CPU 使用率超过某个百分比时,它将发出警报或输出到控制台。
在*nix系统中,可以通过读取/proc/[pid]/stat虚拟文件来获取进程统计信息。
例如,以下代码每10秒检查一次CPU使用情况,并在控制台上输出结果,如果使用率超过20%。它的工作原理是通过检查进程使用的CPU时钟周期数,并将其值与一秒后进行的第二次测量进行比较。差异是该秒内进程使用的时钟周期数。在POSIX系统上,每个处理器每秒有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);
试着看一下这段代码:https://github.com/last/healthjs
Health.js 是一个网络服务,可以获取远程系统的 CPU 使用情况并接收 CPU 使用警报...
Health.js 主要有两种模式:"流模式"和"事件模式"。流模式允许客户端连接并接收流式 CPU 使用数据。事件模式使 Health.js 能够在 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);
process.cpuUsage
只返回经过的时间。 - EvgenyKolyakovusageInPercent = (usage.user + usage.system)/500
即可。 - fidervar os = require('os');
var loads = os.loadavg();
这个指令可以给你过去60秒、5分钟和15分钟的负载平均值。但是,它并不能告诉你CPU使用率的百分比。