LoginSignup
19
19

More than 5 years have passed since last update.

Node.jsアプリケーションのヒープをdumpしたい

Last updated at Posted at 2014-06-16

Node.jsで書かれたイベントドリブンなデーモンはプロセスが死なないため結構リークする。HTTPサーバであれば、クラスタリングしておいて適当に殺せば他のワーカが働いてくれるので問題ないが、持続的接続を行うデーモンの場合は非常に殺しづらい。こういうリークしてるアプリケーションをデバッグしたい場合、デバッガをアタッチすれば良いことが多いのだが、本番環境でしかリークしない時本番で動いていアプリケーションのメモリの内容を直接見られると嬉しい。

node-heapdumpでヒープダンプをとる

node-heapdumpを使うと簡単にV8のヒープをそのままダンプできる。

とりあえずrequireする。

app.coffee
heapdump = require 'heapdump'
...

USR2シグナルを送ってスナップショットをとる

UNIX環境であればてきとうにUSR2シグナルを送るだけでスナップショットをとれる。

kill -USR2 $pid

メソッドを呼び出してスナップショットをとる

メソッドを呼び出して特定場所のスナップショットをとることもできる。Linuxであればforkしてからスナップショットをとってくれるので、ノンブロッキングに実行できる。

heapdump.writeSnapshot "/tmp/heapdump-#{Date.now()}.heapsnapshot"

スナップショットを読む

保存したスナップショットを読みにはGoogle Chromeの開発者ツールを使えば良い。

Developer ToolのProfileタブから適当にロードできる。

DeveloperTool.png

19
19
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
19
19