獲取CPU使用率,內(nèi)存占用率
Node.js os 模塊
提供了一些基本的系統(tǒng)操作函數(shù)。通過使用其中提供的函數(shù)來獲取系統(tǒng)相關(guān)信息
相關(guān)方法可以參考Node.js OS 模塊 | 菜鳥教程 (runoob.com)
內(nèi)存占用率
//使用 os模塊的os.totalmem()可以獲取當(dāng)前總內(nèi)存
export const getTotalmem = function(){
return _os.totalmem() / ( 1024 * 1024 );
}
//os.freemem()獲取的是空閑內(nèi)存
export const getUsedmem = function (){
return (_os.totalmem()-_os.freemem()) / ( 1024 * 1024 );
}
CPU使用率
os.cpus()
返回一個對象數(shù)組官扣,包含所安裝的每個 CPU/內(nèi)核的信息:型號model
、速度speed
(單位 MHz)羞福、時間times
(一個包含 user惕蹄、nice、sys治专、idle 和 irq 所使用 CPU/內(nèi)核毫秒數(shù)的對象)卖陵。
其中times
字段,包含了 user张峰、nice泪蔫、sys、idle喘批、irq 幾個指標(biāo)數(shù)據(jù)撩荣,分別代表 CPU 在用戶模式、良好模式饶深、系統(tǒng)模式餐曹、空閑模式、中斷模式下花費的毫秒數(shù)
打印下os.cpus()里面的內(nèi)容粥喜,可以看到如下信息
[
{
model: 'Intel(R) Xeon(R) Gold 6248R CPU @ 3.00GHz',
speed: 2993,
times: {
user: 10636875,
nice: 0,
sys: 4126515,
idle: 172519703,
irq: 82218
}
},
]
我們先獲取CPU的總信息
//這里獲取的是CPU總信息
function getCPUInfo(callback?:()=>{}){
let cpus = _os.cpus();
let user = 0;
let nice = 0;
let sys = 0;
let idle = 0;
let irq = 0;
let total = 0;
for(let cpu in cpus){
user += cpus[cpu].times.user;
nice += cpus[cpu].times.nice;
sys += cpus[cpu].times.sys;
irq += cpus[cpu].times.irq;
idle += cpus[cpu].times.idle;
}
total = user + nice + sys + idle + irq;
callback? callback() : '' ;
return {
'idle': idle,
'total': total
};
}
通過獲取的信息來計算CPU利用率
注意凸主,這里計算的數(shù)據(jù)不是特別準(zhǔn)備橘券,使用的話小心小心额湘。
/*
*這個 “實時” 不是絕對的實時,因為cpu他是變化的旁舰,
*總會有時差的,我們用一秒的時間隔來計算锋华。得到時間差來反映CPU的延遲,側(cè)面反映了CPU的使用率箭窜。
*/
function getCPUUsage(callback:any, free:boolean){
let stats1 = getCPUInfo();
let startIdle = stats1.idle;
let startTotal = stats1.total;
setTimeout(function() {
let stats2 = getCPUInfo();
let endIdle = stats2.idle;
let endTotal = stats2.total;
let idle = endIdle - startIdle;
let total = endTotal - startTotal;
let perc = idle / total;
if(free === true)
callback( perc );
else
callback( (1 - perc) );
}, 1000 );
}
export const cpuUsage = function(callback){
getCPUUsage(callback, false);
}
//使用
cpuUsage( v => {
log(`占用率為 ${v*100} %`)
})
文章參考了os-utils
這個三方包毯焕,有興趣的可以install下來看下。根據(jù)需要重新封裝到自己的函數(shù)里磺樱,避免引入過多npm包讓項目臃腫纳猫。