Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

nodejsでサーバーのCPUやメモリリソースを取得してみる

前回、Pythonでサーバー上のリソースを取得するためのアプリを作成してみました。
elsammit-beginnerblg.hatenablog.com

前回のアプリはfrontをjavascriptで作成したのですが、どうせならReactを使用してしっかり作ってみようかな?
と思い、再挑戦することに。

どうせならサーバーサイドもpythonではなく、nodejsでも使ってみようと思ったのですが、、、
nodejsでCPUやメモリリソースのチェックの仕方を知らない!!

ということで、今回はnodejsでリソース取得する方法を調べましたので備忘録として残そうと思います。



■CPU・メモリリソース取得するためのモジュール

nodejsでリソースを取得するには、
osモジュールを使用すれば取得できます。

下記でモジュールを読み込めばOK。

const os = require('os');

■CPUリソース取得

では、osモジュールを用いてCPUリソースを取得するためには、
こちらのコードを実行すればOKです。

const cpuInfos = os.cpus();

こちらを実行すると、
各コア毎のCPUリソースがオブジェクト配列で取得できます。

[
  {
    model:*****
    speed: ****,
    times: {
      user: ****,
      nice: 0,
      sys: ****,
      idle: ****
      irq: 0
    }
  },
  {
    model: ****
    speed: ****,
    times: {
      user: ****,
      nice: ****,
      sys: ****,
      idle: ****,
      irq: ****
    }
  },
  ・・・
]

timesオブジェクトの中身はそれぞれ下記の意味になります。

・user CPUがユーザーモードで費やしたミリ秒数。
・nice CPUがniceモードで費やしたミリ秒数。
・sys CPUがsysモードで費やしたミリ秒数。
・idle CPUがアイドルモードで費やしたミリ秒数。
irq CPUがirqモードで費やしたミリ秒数。

■メモリリソース取得

次はメモリリソースの取得です。
メモリはそれぞれ下記の通り、トータルメモリや空きメモリの取得が行えます。

const totalMem = os.totalmem();
const freeMem = os.freemem();

■実際にCPUやメモリリソースを取得するためのサーバーアプリを作成

では、先ほどのCPUやメモリを取得するWebアプリケーションを簡単に作成してみました。
コードはこちら。

const os = require('os');
const express = require('express');

const app = express();

getCpuInfo = () =>{
    const nowDate = new Date();
    const cpuInfos = os.cpus();
    let cpuUsage = 0;
    let cpuUsageRet = [];

    cpuInfos.forEach((element) => {
        let total = 0;
        for(let type in element.times){
            total += element.times[type];
        }
        cpuUsage += (1 - (element.times["idle"] / total))* 100;
    });
    cpuUsage = (cpuUsage / count).toFixed(2);
    cpuUsageRet = {cpuUsage:cpuUsage,date:nowDate};
    return cpuUsageRet;
}

getMemInfo = () =>{
    const nowDate = new Date();
    const nowDateStr = `${nowDate.getFullYear()}/${nowDate.getMonth()+1}/${nowDate.getDate()} ${nowDate.getHours()}:${nowDate.getMinutes()}:${nowDate.getSeconds()}`
    const totalMem = os.totalmem();
    const freeMem = os.freemem();

    const memUsage = ((1 - freeMem / totalMem)*100).toFixed(2);
    return {
        date:nowDateStr, memUsage:memUsage, 
    };
}

app.listen(8080, ()=>{
    console.log("Server Start");
});

app.get('/', (req, res) =>{
    const cpuUsage = getCpuInfo();
    const memUsage = getMemInfo();
    const usage = {CPU:cpuUsage, Memory:memUsage};
    res.json(usage);
    res.end();
});

expressを使用しておりますが、コードは単純で、
getリクエストを受け付けたら、CPUやメモリリソースを取得し、jsonでfrontに返すコードになります。

こちらを、

node ファイル名.js

等で実行頂いた後にWebブラウザ等でアクセスすると、
CPUやメモリリソースが格納されたjsonデータが取得できるかと思います。

■最後に

今回はnodejsでリソースを取得する方法についてまとめました。
react + nodejsでリソース取得用のアプリを作成中です。
作成出来ましたら、ブログで報告していきたいと思います。