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
が全体のメモリ使用量。
heapTotal
やheapUsed
は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
以上!!
参考にしたサイト様
- Node.jsの使用メモリを観測する方法 - Qiita
- Node.jsでメモリリーク箇所を特定
- aide-master/node-memwatch: A NodeJS library to keep an eye on your memory usage, and discover and isolate leaks.
- 「俺のNode.jsがこんなに遅いわけがない!」って時に試したいこと - Qiita
- Node.jsのパフォーマンスチューニングのtips - 技術探し
- Easy profiling for Node.js Applications | Node.js
- Node.jsでプロファイリングをする方法 - Qiita
- how to run profile with ts-node? · Issue #795 · TypeStrong/ts-node
- Node.js でメモリ肥大化の原因を特定してみた
- Node.js Performance 改善ガイド - from scratch
- node.jsでメモリリークが起きたときの対応手順を実例を交えつつ紹介
- bnoordhuis/node-heapdump: Make a dump of the V8 heap for later inspection.