檢視原始碼 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
- 程序訊息佇列的長度。
注意
Time 和 Reds 可以顯示為累積值,或者顯示為自上次更新以來的數值。
設定
所有設定參數都可以在啟動時通過在命令列中添加 -OptName Value
來設定,例如:
% etop -node tiger@durin -setcookie mycookie -lines 15
所有有效的 Erlang Top 設定參數的清單都可以在模組 etop
中找到。
參數 lines
、interval
、accumulate
和 sort
可以在執行期間通過函數 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
。