LoginSignup
48
40

More than 5 years have passed since last update.

VisualixirでElixir/Erangノード内部を覗いてみる

Posted at

はじめに

Elixir/Erlangで書かれたプログラムはErlang VMという処理系で実行されています。VM内部では軽量プロセスと呼ばれる処理の実行単位が互いにメッセージを送りあったり、linkmonitorを使って監視しあい並列分散的に全体的な処理を前に進めます。
軽量プロセス間の関係はElixir/Erlangプログラムのキモで図を用いての理解が広く行われていますが、意外にもその可視化はErlang標準のobserverというモジュールしか有力なものがありませんでした。
本稿では最近リリースされたvisualixirというElixirで書かれた軽量プロセスのビジュアライジング・ツールを紹介します。

Visualixrとは

簡潔にまとめると以下のような感じです。

  • https://github.com/koudelka/visualixir
  • Elixir/Phoenix製
  • サーバを立ててブラウザで見る
  • Erlang VMノードならプログラムがErlangで書かれていようがElixirで書かれていようが問題ない

使ってみる

必要なもの

  • Elixir1.0以上がインストールされた環境
  • npm(バージョンが新しすぎるとnpm installに失敗しました。バージョン依存があるかもで。2.1.17だとうまくいきました)
  • Chrome(動作確認されているブラウザ)

インストール

https://github.com/koudelka/visualixir/blob/master/README.md に書かれている通り。

mix deps.get && mix compile && npm install
elixir --sname visualixir --hidden -S mix phoenix.server

これでノードがたちあがりサーバが立ったのでブラウザてhttp://localhost:4000を叩いてみましょう。

自身のノードを覗いてみる。

visualixr@~~という名前でつくったノードがvisualixir自身がいるノードです。ノード名をクリックするとノード内のプロセス間グラフ構造が現れます。
visualixir
簡単に移動拡大縮小ができるのが素晴らしい。プロセスをドラッグするとボヨンボヨン動きます。

Erlangノードを覗いてみる

せっかくなんでErlangシェルを立ち上げてノードを見てみましょう。

ノード名を指定することを忘れずにシェルをたちあげます。

erl -sname hoge

ノード名を直接書いてもうまくいかないことが多いので(まだ安定してないんでしょうか?)しばらく待ってからブラウザをリロードしてみましょう。ノード同士が互いに認識しあっているとhoge@~~が選択できるようになっているはずです。

erl_shell

バックグラウンドでこれだけのプロセスがいるんですね。新しくプロセスを作ってみましょう。

(hoge@massn)1> Pid = spawn(fun() -> timer:sleep(infinity) end).
<0.76.0>

erl_shell2

孤独なプロセスができましたね。PIDを忘れてしまうと生き続けてしまいます。spawn_linkしてみましょう。

(hoge@massn)2> Pid2 = spawn_link(fun() -> timer:sleep(infinity) end).
<0.79.0>

erl_shell3

今度はlinkされているので母体のプロセスにつながっていますね。最後にプロセスを作りまくってみましょう。


(hoge@massn)3> lists:map(fun(_) ->
(hoge@massn)4> spawn_link(fun() -> timer:sleep(infinity) end)
(hoge@massn)5> end, lists:seq(1, 50)).
[<0.88.0>,<0.89.0>,<0.90.0>,<0.91.0>,<0.92.0>,<0.93.0>,
 <0.94.0>,<0.95.0>,<0.96.0>,<0.97.0>,<0.98.0>,<0.99.0>,
 <0.100.0>,<0.101.0>,<0.102.0>,<0.103.0>,<0.104.0>,<0.105.0>,
 <0.106.0>,<0.107.0>,<0.108.0>,<0.109.0>,<0.110.0>,<0.111.0>,
 <0.112.0>,<0.113.0>,<0.114.0>,<0.115.0>,<0.116.0>|...]

めっちゃできました。

erl_shell4

まとめ

勉強用、デバッグ、システム運用といろいろ使えそうですね。

48
40
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
48
40