檢視原始碼 Erlang Top

簡介

Erlang Top,etop,是一個用於呈現 Erlang 程序信息的工具,類似於 UNIX 中的 top 所呈現的信息。

開始使用

可以通過以下任一方式啟動 Erlang Top

  • 使用腳本 etop
  • 使用批次檔 etop.bat,例如,etop -node tiger@durin

輸出

Erlang Top 的輸出如下:

========================================================================================
 tiger@durin                                                               13:40:32
 Load:  cpu         0               Memory:  total        1997    binary         33
        procs     197                        processes       0    code          173
        runq      135                        atom         1002    ets            95

Pid            Name or Initial Func    Time    Reds  Memory    MsgQ Current Function
----------------------------------------------------------------------------------------
<127.23.0>     code_server                0   59585   78064       0 gen_server:loop/6
<127.21.0>     file_server_2              0   36380   44276       0 gen_server:loop/6
<127.2.0>      erl_prim_loader            0   27962    3740       0 erl_prim_loader:loop
<127.9.0>      kernel_sup                 0    6998    4676       0 gen_server:loop/6
<127.17.0>     net_kernel                62    6018    3136       0 gen_server:loop/6
<127.0.0>      init                       0    4156    4352       0 init:loop/1
<127.16.0>     auth                       0    1765    1264       0 gen_server:loop/6
<127.18.0>     inet_tcp_dist:accept       0     660    1416       0 prim_inet:accept0/2
<127.5.0>      application_controll       0     569    6756       0 gen_server:loop/6
<127.137.0>    net_kernel:do_spawn_       0     553    5840       0 dbg:do_relay_1/1
========================================================================================

標頭包含一些系統資訊

  • 負載

    • cpu - 執行時間/實際時間,也就是節點處於活動狀態的時間百分比。

    • procs - 節點上的程序數量。

    • runq - 準備好執行的程序數量。

  • Memory - 節點分配的記憶體,單位為千位元組 (KB)。

針對每個程序,會顯示以下資訊

  • Time - 程序的執行時間,也就是程序被排程執行的時間。

  • Reds - 程序執行的歸約 (reduction) 次數。

  • Memory - 程序的大小,單位為位元組,通過呼叫 process_info(Pid,memory) 取得。

  • MsgQ - 程序訊息佇列的長度。

注意

TimeReds 可以顯示為累積值,或者顯示為自上次更新以來的數值。

設定

所有設定參數都可以在啟動時通過在命令列中添加 -OptName Value 來設定,例如:

% etop -node tiger@durin -setcookie mycookie -lines 15

所有有效的 Erlang Top 設定參數的清單都可以在模組 etop 中找到。

參數 linesintervalaccumulatesort 可以在執行期間通過函數 etop:config/2 進行變更。

範例

使用基於文字的呈現方式變更設定參數 lines。在變更之前,顯示 10 行如下:

========================================================================================
 tiger@durin                                                               10:12:39
 Load:  cpu         0               Memory:  total        1858    binary         33
        procs     191                        processes       0    code          173
        runq        2                        atom         1002    ets            95

Pid            Name or Initial Func    Time    Reds  Memory    MsgQ Current Function
----------------------------------------------------------------------------------------
<127.23.0>     code_server                0   60350   71176       0 gen_server:loop/6
<127.21.0>     file_server_2              0   36380   44276       0 gen_server:loop/6
<127.2.0>      erl_prim_loader            0   27962    3740       0 erl_prim_loader:loop
<127.17.0>     net_kernel                 0   13808    3916       0 gen_server:loop/6
<127.9.0>      kernel_sup                 0    6998    4676       0 gen_server:loop/6
<127.0.0>      init                       0    4156    4352       0 init:loop/1
<127.18.0>     inet_tcp_dist:accept       0    2196    1416       0 prim_inet:accept0/2
<127.16.0>     auth                       0    1893    1264       0 gen_server:loop/6
<127.43.0>     ddll_server                0     582    3744       0 gen_server:loop/6
<127.5.0>      application_controll       0     569    6756       0 gen_server:loop/6
========================================================================================

呼叫函數 etop:config/2 以將顯示的行數變更為 5

> etop:config(lines,5).
ok

變更後,顯示 5 行如下:

(etop@durin)2>
========================================================================================
 tiger@durin                                                               10:12:44
 Load:  cpu         0               Memory:  total        1859    binary         33
        procs     192                        processes       0    code          173
        runq        2                        atom         1002    ets            95

Pid            Name or Initial Func    Time    Reds  Memory    MsgQ Current Function
----------------------------------------------------------------------------------------
<127.17.0>     net_kernel               183      70    4092       0 gen_server:loop/6
<127.335.0>    inet_tcp_dist:do_acc     141      22    1856       0 dist_util:con_loop/9
<127.19.0>     net_kernel:ticker/2      155       6    1244       0 net_kernel:ticker1/2
<127.341.0>    net_kernel:do_spawn_       0       0    5840       0 dbg:do_relay_1/1
<127.43.0>     ddll_server                0       0    3744       0 gen_server:loop/6
========================================================================================

在任何時候,都可以使用函數 etop:dump/1 將目前的 Erlang Top 顯示轉儲到文字檔案。

停止

若要停止 Erlang Top,請使用函數 etop:stop/0