とある目的で「CPU 負荷とメモリ利用状態を Node.js から取得する」プログラムを作ったので、github で公開してみました:
https://github.com/dotnsf/cpumem

2019020101



Git clone かダウンロードでソースコードをコピー&展開し、
$ node cpumem

で実行します。デフォルト設定だと5秒ごとに以下のようなフォーマットで結果をコンソールに出力します(赤字はコメント):
{
  "cpus": [
    {
      "user": 5.438012814200345, 1つ目のCPUコアのユーザープロセスによる利用率
      "nice": 0.6939879964053115,  1つ目のCPUコアの実行優先度を変更したユーザープロセスによる利用率
      "sys": 0.6002479372975158,  1つ目のCPUコアのシステムプロセスによる利用率
      "idle": 93.26775125209683,  1つ目のCPUコアのアイドル状態になっている割合
      "irq": 0
    },
      :
 (CPU コア数ぶん繰り返し)
      :
  ],
  "totalmem": 8284266496, 総メモリ量
  "freemem": 345624576, 空きメモリ量
  "uptime": 24193171, システム稼働時間(秒)
  "loadavg": [
    0.36669921875, 直近1分間の平均CPUおよびIO利用率
    0.4462890625, 直近5分間の平均CPUおよびIO利用率
    0.50439453125 直近15分間の平均CPUおよびIO利用率
  ],
  "timestamp": 1548947954556 記録したタイミングのタイムスタンプ値
}


2019020100


公開しているこのプログラムでは取得結果を単純にコンソール出力しているだけですが、実際にはこの結果を MQTT などでどこかに飛ばして記録したり、データベースに格納したりすることを想定しています。

中身はすごくシンプルで、単純に os パッケージを require し、os パッケージで提供されている機能をほぼそのまま使って CPU 利用率やメモリ使用量を求め、それを出力しているだけです。CPU 利用率のみ、いわゆる「パーセント」値で出力されるよう計算していますが、その程度です。


なお、デフォルトの取得間隔である5秒を変更する場合は、settings.js 内の exports.intervalms の値を変更してから実行してください(値はミリ秒で指定)。