LoginSignup
28
25

More than 5 years have passed since last update.

node.jsでメモリ使用量を取得する方法あれこれ

Posted at

node.jsでメモリ使用量を取得する方法あれこれ

はじめに

BounscaleというオートスケールするHeroku Addonを作っています。

Bounscaleでは実験的にnode.jsへの対応を実施しています。
オートスケールするにあたり、各種リソースの監視が必要なのですが、node.jsでどのようにメモリ使用量を取得するか調べたので下記しておきます。

バージョン

node.js v0.10.15

取得方法

調べた限りには下記3種類の方法を見つけました。

  • osオブジェクトの情報を利用する方法
  • processオブジェクトの情報を利用する方法
  • usageライブラリを利用する方法

osオブジェクトの情報を利用する方法

osオブジェクトはnodeの標準APIで提供されています。

下記の感じで全メモリ容量と未使用メモリ容量を取得できます。
引き算すればメモリ使用量が算出できると思います。

> os.totalmem()
1043562496
> os.freemem()
71467008

ただし、これで取得できるのはシステム全体のメモリ情報です。
node.jsのプロセスが消費しているメモリの容量はこれではわかりません。

processオブジェクトの情報を利用する方法

processオブジェクトからもメモリ情報を取得できます。

> process.memoryUsage()
{ rss: 9019392,
  heapTotal: 5115392,
  heapUsed: 2658096 }

rssはアプリケーションのメモリ使用量で、heapTotal/heapUsedはV8エンジンのヒープメモリ使用量とのことです。
これはプロセス単位で取得できているようです。

usageライブラリを利用する方法

usageというシステム情報取得をするライブラリがnpmで公開されています。
Cで書かれているようで、直接システムの情報を取っていそうです。

まずnpmコマンドでインストールします。

npm install usage

実行します。

> var usage = require('usage')
undefined
> var memory = null;
undefined
> usage.lookup(process.pid, function(err, result){memory = result.memory})
undefined
> memory
13520896

heroku run nodeで値をみたところでは、process.memoryUsage()のrssとほぼ同じ値が返ってきているようです。

終わりに

標準APIに含まれていて、プロセス単位でメモリ消費量を取得できるprocess.memoryUsage()を使うのが手っ取り早いですね。

28
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
25