rog*_*pvl 16 cpu operating-system node.js
有没有办法将os.cpus()信息转换为百分比?就像iostat的输出一样(在CPU部分).
我的代码:
var os = require('os');
console.log(os.cpus());
Run Code Online (Sandbox Code Playgroud)
输出:
[ { model: 'MacBookAir4,2',
speed: 1800,
times:
{ user: 5264280,
nice: 0,
sys: 4001110,
idle: 58703910,
irq: 0 } },
{ model: 'MacBookAir4,2',
speed: 1800,
times:
{ user: 2215030,
nice: 0,
sys: 1072600,
idle: 64657440,
irq: 0 } },
{ model: 'MacBookAir4,2',
speed: 1800,
times:
{ user: 5973360,
nice: 0,
sys: 3197990,
idle: 58773760,
irq: 0 } },
{ model: 'MacBookAir4,2',
speed: 1800,
times:
{ user: 2187650,
nice: 0,
sys: 1042550,
idle: 64714820,
irq: 0 } } ]
Run Code Online (Sandbox Code Playgroud)
我希望将"时间"指标转换为百分比,就像在iostat命令中显示一样:
cpu
us sy id
6 3 91
Run Code Online (Sandbox Code Playgroud)
我知道nodejs函数中的值是在CPU滴答声中,但我不知道应该使用什么公式将它们转换为百分比:)
谢谢.
Lin*_*iel 32
根据文档,times是
包含在以下内容中花费的CPU滴答数的对象:user,nice,sys,idle和irq
所以你应该能够总结时间并计算百分比,如下所示:
var cpus = os.cpus();
for(var i = 0, len = cpus.length; i < len; i++) {
console.log("CPU %s:", i);
var cpu = cpus[i], total = 0;
for(var type in cpu.times) {
total += cpu.times[type];
}
for(type in cpu.times) {
console.log("\t", type, Math.round(100 * cpu.times[type] / total));
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:正如Tom Frost在评论中所说,这是自系统启动以来的平均使用率.这与问题是一致的,因为同样如此iostat.但是,iostat可以选择定期更新,显示自上次更新以来的平均使用情况.汤姆的方法可以很好地实现它.
这是我的解决方案
间隔以秒为单位。
10将计算过去10秒的负载!
var _ = require("underscore");
var os = require("os");
var interval = 1;
var old = _.map(os.cpus(),function(cpu){ return cpu.times;})
setInterval(function() {
var result = [];
var current = _.map(os.cpus(),function(cpu){ return cpu.times; })
_.each(current, function(item,cpuKey){
result[cpuKey]={}
var oldVal = old[cpuKey];
_.each(_.keys(item),function(timeKey){
var diff = ( parseFloat((item[timeKey]) - parseFloat(oldVal[timeKey])) / parseFloat((interval*100)));
var name = timeKey;
if(timeKey == "idle"){
name = "CPU"
diff = 100 - diff;
}
//console.log(timeKey + ":\t" + oldVal[timeKey] + "\t\t" + item[timeKey] + "\t\t" + diff);
result[cpuKey][name]=diff.toFixed(0);
});
});
console.log(result);
old=current;
}, (interval * 1000));
Run Code Online (Sandbox Code Playgroud)
在我的 8 核上每 n 秒输出类似这样的内容
[ { user: '82', nice: '0', sys: '18', CPU: '100', irq: '0' },
{ user: '1', nice: '0', sys: '1', CPU: '3', irq: '0' },
{ user: '1', nice: '0', sys: '1', CPU: '3', irq: '0' },
{ user: '9', nice: '0', sys: '2', CPU: '11', irq: '0' },
{ user: '1', nice: '0', sys: '0', CPU: '1', irq: '0' },
{ user: '1', nice: '0', sys: '1', CPU: '2', irq: '0' },
{ user: '1', nice: '0', sys: '2', CPU: '2', irq: '0' },
{ user: '1', nice: '0', sys: '2', CPU: '3', irq: '0' } ]
Run Code Online (Sandbox Code Playgroud)
通过 socket.io 将其推送到我的流程图中;)
| 归档时间: |
|
| 查看次数: |
26969 次 |
| 最近记录: |