Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert the output of os.cpus() in Node.js to percentage

Is there a way to convert the os.cpus() info to percentage? Just like the output of iostat (on the CPU section).

My code:

var os = require('os');
console.log(os.cpus());

The output:

[ { 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 } } ]

I would like to have the "times" metric converted to percentage, just like is show on the iostat command:

  cpu
us sy id
6  3 91

I understand that the values in the nodejs function are in CPU ticks, but I have no idea what formula should I use to convert them to percentage :)

Thanks.

like image 592
rogeriopvl Avatar asked Mar 05 '12 11:03

rogeriopvl


People also ask

How do I see CPU usage in node JS?

You can also use process. cpuUsage() to return the system and user cpu time in microseconds. It can also calculate the difference to a previous call. Show activity on this post.

Does NodeJS use CPU?

NodeJS uses Javascript to develop server side applications and shares the same behavior. It runs on one CPU core regardless of how many CPU cores you have in your machine or a virtual machine in the cloud.

Can NodeJS use all cores?

Node. js absolutely does scale on multi-core machines. Yes, Node. js is one-thread-per-process.


2 Answers

According to the docs, times is

an object containing the number of CPU ticks spent in: user, nice, sys, idle, and irq

So you should just be able to sum the times and calculate the percentage, like below:

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));
    }
}

EDIT: As Tom Frost says in the comments, this is the average usage since system boot. This is consistent with the question, since the same is true of iostat. However, iostat has the option of doing regular updates, showing the average usage since the last update. Tom's method would work well for implementing that.

like image 161
Linus Thiel Avatar answered Oct 30 '22 11:10

Linus Thiel


This module, that caN be installed using NPM provides what you need:

https://github.com/oscmejia/os-utils

calle the cpuUsage(callback) method and you will get what you need.

like image 21
oscarm Avatar answered Oct 30 '22 10:10

oscarm