etop の 使い方


GUI ベースの etop = getop

Erlang には 指定ノードに於ける (Erlang) プロセス毎の状態を表示してくれるベンリツール etop があります。
丁度 UNIX コマンドの top のようなものです。
getop という GUI ベースの実装も提供されています。

場所

etop、getop は
/usr/lib/erlang/lib/observer-0.9.7.4/priv/bin/
あたりにあると思います。
PATH を通しておくと便利です。

起動方法

監視対象のノードを起動します。ノードの命名を忘れずに。

$erl -name 'hoge@localhost'

次に etop を起動します。監視対象のノードの指定を忘れずに。

$etop -node 'hoge@localhost'


etop を起動したところ。デフォルトだと 5 秒毎に更新される

おお。起動しましたね!

getop も同じ方法で OK です。

画面の見方

  • Load
    • cpu は Runtime/Wallclock を表します
    • procs はノード上のプロセス数を表します
    • runq は実行可能なプロセス数を表します
  • Memory
    • 割当てられたメモリの大きさを表します
    • 単位は KB です
  • Time
    • プロセスの runtime を表します
  • Reds
    • プロセスが実行中の reduction*1 の数を表します
  • Memory
    • process_info(Pid,memory) によって得られるプロセスのサイズを表します
  • MsgQ
    • メッセージキューのサイズを表します (メールボックスに入っている ≒ まだ処理されていないメッセージの数)

オプション

下記のパラメータが使用可能です。起動後にも etop:config(Key, Value) で変更可能です。
また、 getop の場合は GUI ベースで設定の変更が可能ですヨ。

  • node
    • 監視対称のノード名を指定します (ex. -node 'hoge@localhost')
    • Value: atom()
    • これは必須のパラメータです
  • setcookie
    • 監視対象ノードで cookie を設定している場合は同じものを指定してやりましょう
    • Value: atom()
  • lines
    • 表示するプロセス数を指定します
    • Value: integer()
    • Default: 10
  • interval
    • プロセス状態の再描画間隔を指定します。単位は秒です。
    • Value: integer()
    • Default: 5
  • accumulate
    • true を指定した場合、実行時間と recution time*2 が累計されていきます (false の場合は再描画毎に計測されます)
    • Value: boolean()
    • Default: false
  • sort
    • 並び替えの基準を指定します
    • Value: runtime | reductions | memory | msg_q
    • Default: runtime (reductions if tracing=off)
  • tracing
    • 妙なメッセージが出て邪魔なようなら off にしましょう (Erlang top got garbage... とか) *3
    • Value: on | off
    • Default: on

まとめ

結構便利です。etop。眺めてるだけでニヤニヤできます。
妙にメモリ食ってるプロセスや、メールボックスにメッセージが溜ってるプロセスがいたら注目します。

% etop -node 'hoge@localhost' -interval 1 -lines 200 -tracing off > hoge.log

とかでログを取りつつ

% tail -f hoge.log

として眺めることが結構あります。

参考

Erlang Top
etop

*1:これが何をさしているのか分かりませんでした。教えてエロイ人>< \\2009-03-17 追記: reduction とは関数 (BIF を含む) の呼び出し回数だそうです。こいつが 1000 に逹すると BEAM エミュレータによるコンテキストスウィッチが行われるそうです。エロイ人に教えて頂きました! mikage さんありがとうございます!

*2:Reds 列 *1

*3:詳しく知りたい場合は etop のマニュアルページへ。。。