Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get system statistics with node.js

I have a distributed server system.

There are a lot of servers, coordinated through PubSub. All of them are connected to the statistics server. Every minute servers send their stats to the stat server (how many requests was processed, average time etc.).

So... It would be nice to include system status in this stat-messages. I need CPU load (every core) and amount of free memory.

I made a little workaround and decided to call a linux command with "exec", parse answer and form a JSON data for sending.

But how can I get this data from command line?

On Mac OS X I can easily get all I need with geektool scripts, but on linux (debian) they don't work.

For example:

top -l 1 | awk '/PhysMem/ {print "Used: " $8 " Free: " $10}'

On Mac OS X Lion I get:

Used: 3246M Free: 848M

And just an error in debian...

like image 230
brianconnoly Avatar asked Apr 26 '12 11:04

brianconnoly


People also ask

How do I check CPU usage in node js?

To check the utilization of compute nodes, you can SSH to it from any login node and then run commands such as htop and nvidia-smi . You can do this only for the compute nodes on which your Slurm job is currently running.

Is Node js good for data processing?

Node. js and other JavaScript libraries are excellent choices for data science. Here's why. JavaScript (also known as JS) is the lingua franca of the web, as it is supported by all the major web browsers—the other languages that run in browsers are transpiled (or translated) to JavaScript.

What is profiling in node js?

Node. js profiling allows you to use the profiler already available to you (--prof) through the Node. js program and discover performance-related issues within your application. With this profiler, you'll be able to delve into the performance of your application and find what's causing bottlenecks.

Is Node js a programming language?

Introduction: Node. js is an open-source and cross-platform runtime environment for executing JavaScript code outside a browser. You need to remember that NodeJS is not a framework and it's not a programming language.


3 Answers

On Linux, you can use /proc. See here for a bunch of command line examples to read the stats.

It would be better to read the files from Node directly though, using fs.readFile()

Update: There is also the OS API which is probably better. Example usage: Convert the output of os.cpus() in Node.js to percentage

like image 146
w00t Avatar answered Sep 22 '22 23:09

w00t


IMHO the best option is to use the systeminformation module,

where you can retrieve detailed hardware, system, and OS information with Linux, macOS, partial Windows, and FreeBSD support.

For example to get the CPU information:

const si = require('systeminformation');

// callback style
si.cpu(function(data) {
    console.log('CPU-Information:');
    console.log(data);
});

// promises style - new in version 3
si.cpu()
    .then(data => console.log(data))
    .catch(error => console.error(error));

// full async / await example (node >= 7.6)
async function cpu() {
    try {
        const data = await si.cpu();
        console.log(data)
    } catch (e) {
        console.log(e)
    }
}

This example will result the following:

{ manufacturer: 'Intel®',
    brand: 'Core™ i5-3317U',
    vendor: 'GenuineIntel',
    family: '6',
    model: '58',
    stepping: '9',
    revision: '',
    voltage: '',
    speed: '1.70',
    speedmin: '0.80',
    speedmax: '2.60',
    cores: 4,
    cache: { l1d: 32768, l1i: 32768, l2: 262144, l3: 3145728 } }
CPU-Information:
{ manufacturer: 'Intel®',
    brand: 'Core™ i5-3317U',
    vendor: 'GenuineIntel',
    family: '6',
    model: '58',
    stepping: '9',
    revision: '',
    voltage: '',
    speed: '1.70',
    speedmin: '0.80',
    speedmax: '2.60',
    cores: 4,
    cache: { l1d: 32768, l1i: 32768, l2: 262144, l3: 3145728 } }
like image 30
valdeci Avatar answered Sep 23 '22 23:09

valdeci


You can try os-usage which is a wrapper for top command.

It provides stats like cpu usage and memory usage. Example usage:

var usage = require('os-usage');

// create an instance of CpuMonitor
var cpuMonitor = new usage.CpuMonitor();

// watch cpu usage overview
cpuMonitor.on('cpuUsage', function(data) {
    console.log(data);

    // { user: '9.33', sys: '56.0', idle: '34.66' }
});

// watch processes that use most cpu percentage
cpuMonitor.on('topCpuProcs', function(data) {
    console.log(data);

    // [ { pid: '21749', cpu: '0.0', command: 'top' },
    //  { pid: '21748', cpu: '0.0', command: 'node' },
    //  { pid: '21747', cpu: '0.0', command: 'node' },
    //  { pid: '21710', cpu: '0.0', command: 'com.apple.iCloud' },
    //  { pid: '21670', cpu: '0.0', command: 'LookupViewServic' } ]
});
like image 30
tning Avatar answered Sep 22 '22 23:09

tning