LoginSignup
0
0

サーバー上でpm2を用いて実行されるnode.jsアプリのmemory leakを簡単に調査する方法

Posted at

前提

どうもメモリ使用量が増えつづける。memory leakをしている気がする。しかし手元のdev環境では再現しない。どうしても本番環境で調査しなければならない。そんなどうしようもない状況に追い込まれた人向けの記事です。基本的にやめておいたほうが良いと思います。heapdumpのnpmモジュールとか入れて、dumpのsnapshotを撮影して……みたいなのが非常に面倒くさい人向けでもあります。ssh接続ができてchromeが入っていれば、追加でインストールとか要りません。

pm2にinspectの引数をつけてrestartする

pm2 restart NUM --node-args '--inspect'

これでdebuggerありで起動します。
注意点として、--inspectで起動するとメモリの使用量が如実に増えます。ぎりぎりのメモリでやりくりしているならやめておいたほうが良いです。
port変えたかったら変えてもいいです。

ローカルとリモートをportforwardする

vscodeでサーバーとつないでportforwardingしても良いですが、一応下記コマンドで出来ます。

 ssh -NL 9229:example.com:9229 user@example.com

これでサーバー上の9229ポートをローカルで使えるようになりました。

chrome inspectを起動

アドレスバーでchrome://inspect
あとはいつも通りです。基本設定でport9229入っている気もしますが、入っていないときはConfigure->localhost:9229としておくとtargetをinspectできるようになります。

あとは自分の好きなときに3点ヒープダンプ法などを用いて、増加している困ったオブジェクトを探し出すことができます。

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