有没有办法用代码找出node.js进程的%cpu使用率?这样当node.js服务器运行并检测到CPU超过某个%时,它就会发出警报或控制台输出。
答案 0 :(得分:27)
On * nix系统可以通过读取/ proc / [pid] / stat虚拟文件来获取进程统计信息。
例如,这将每十秒检查一次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);
答案 1 :(得分:16)
尝试查看此代码:https://github.com/last/healthjs
获取远程系统CPU和接收CPU使用率警报的网络服务......
Health.js提供2种主要模式:“流模式”和“事件模式”。流模式允许客户端连接和接收流式CPU使用数据。事件模式使Health.js能够在CPU使用率达到特定阈值时通知远程服务器。两种模式都可以同时运行......
答案 2 :(得分:7)
请参阅node-usage以了解跟踪进程CPU和内存使用情况(不是系统)
答案 3 :(得分:6)
您现在可以使用os模块。
var os = require('os');
var loads = os.loadavg();
这为您提供最后60秒,5分钟和15分钟的平均负载。 虽然这并没有给你cpu的使用率。
答案 4 :(得分:3)
使用节点process.cpuUsage功能(在节点v6.1.0中引入)。 它显示了cpu在节点进程上花费的时间。从文档中获取的示例:
const previousUsage = process.cpuUsage();
// { user: 38579, system: 6986 }
// spin the CPU for 500 milliseconds
const now = Date.now();
while (Date.now() - now < 500);
// set 2 sec "non-busy" timeout
setTimeout(function() {
console.log(process.cpuUsage(previousUsage);
// { user: 514883, system: 11226 } ~ 0,5 sec
}, 2000);
答案 5 :(得分:0)
另一种选择是使用node-red-contrib-os包