Erlang/Elixirのdebugを楽にするツールを知ったのでメモ。
- https://github.com/andytill/erlyberly
- http://blog.plataformatec.com.br/2016/04/how-to-trace-elixir-nodes-with-erlyberly/
実行のワンライナーは以下。
$ git clone git@github.com:andytill/erlyberly.git && cd erlyberly && ./mvnw clean compile install assembly:single && java -jar target/*runnable.jar
これが全て終わって、JavaのGUIが表示されたら、例えば以下のようにnodeを指定してアプリを起動します。
$ iex --name "foo@127.0.0.1" -S mix phoenix.server
起動後、Javaで表示されているtarget nodeに “foo@127.0.0.1” を指定。
すると、メモリ使用量とか、諸々を確認することができる以下のような画面を確認できるようになります。
以下は、この簡単なPhoenixアプリケーションに対して実行した時。

以下は、http_proxyに対して。

いずれも、BEAM VMのprocessやatomなどのメモリ使用量が計測できてとても良いですね。atomがGCされないので、これが過度に大きいとメモリ圧迫している、とか簡単にわかりますし。あとはfunctionsの名前空間の形もパッと見ることができますね。
https://github.com/andytill/erlyberly#get-the-process-state
にあるように、processの状態を抜くこともできるようです。
ある程度はObserverでも見ることができますが、メモリ使用量をこんな感じでグラフにしてくれるのは解りやすい。Java製。