くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

Node.jsで時間/メモリ/CPU使用率の計測

Node.jsで動かしてるコードの高速化/軽量化をしたいなと思ったけど、
どうやって計測すればいいんだろ?と思ったので、調べたときの備忘録。

時間計測

console.time()performance.now()で計測するのが良さそう

console.timeの例

console.time("measure_time_label");

for (let i = 0; i < 5; ++i) {
  console.timeLog("measure_time_label", `計測中....${i}`);
}

console.timeEnd("measure_time_label");

こんな感じで途中経過とトータル時間を計測できる

measure_time_label: 0.062ms 計測中....0
measure_time_label: 1.162ms 計測中....1
measure_time_label: 1.215ms 計測中....2
measure_time_label: 1.278ms 計測中....3
measure_time_label: 1.321ms 計測中....4
measure_time_label: 1.376ms

メモリ使用率

Node.jsの標準ライブラリにprocess.memoryUsage()があるよう。
Process | Node.js v16.3.0 Documentation

console.log(process.memoryUsage());
// Prints:
// {
//  rss: 4935680,
//  heapTotal: 1826816,
//  heapUsed: 650472,
//  external: 49879,
//  arrayBuffers: 9386
// }

rssが全体のメモリ使用量。
heapTotalheapUsedはV8のメモリ使用量。

node-memwatchという便利なライブラリもある。

CPU使用率

osモジュールを使うと確認できる。

const os = require('os');

console.log(os.cpus());

node-os-utilsという、便利なライブラリもある。

node --prof

Node.js自体のプロファイルオプションもあるよう。
Easy profiling for Node.js Applications | Node.js

# --profをつけて実行
$ node --prof app.js

# ログが出るので、整形して表示
$ node --prof-process isolate-0x1046a7000-92554-v8.log

ts-nodeのときはこんな感じ。

# --profをつけて実行(ts-node版)
$ node -r ts-node/register --prof app.ts

以上!!

参考にしたサイト様