【发布时间】:2011-12-08 02:22:00
【问题描述】:
有没有办法通过代码找出 node.js 进程的 cpu 使用率。这样当 node.js 应用程序在服务器上运行并检测到 CPU 超过一定百分比时,它就会发出警报或控制台输出。
【问题讨论】:
有没有办法通过代码找出 node.js 进程的 cpu 使用率。这样当 node.js 应用程序在服务器上运行并检测到 CPU 超过一定百分比时,它就会发出警报或控制台输出。
【问题讨论】:
在 *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);
【讨论】:
尝试查看此代码:https://github.com/last/healthjs
用于获取远程系统 CPU 并接收 CPU 使用率警报的网络服务...
Health.js 提供 2 种主要模式:“流媒体模式”和“事件模式”。流式传输模式允许客户端连接和接收流式 CPU 使用数据。事件模式使 Health.js 在 CPU 使用率达到某个阈值时通知远程服务器。两种模式可以同时运行...
【讨论】:
您现在可以使用 os 模块了。
var os = require('os');
var loads = os.loadavg();
这将为您提供过去 60 秒、5 分钟和 15 分钟的平均负载。 不过,这并没有给你 cpu 使用率。
【讨论】:
请参阅node-usage 以跟踪进程 CPU 和内存使用情况(而非系统)
【讨论】:
使用节点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);
【讨论】:
process.cpuUsage 只返回经过了多少时间
usageInPercent = (usage.user + usage.system)/500.
另一种选择是使用node-red-contrib-os 包
【讨论】: