查看源代码 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
- 节点分配的内存量,以千字节为单位。
对于每个进程,会显示以下信息
Time
- 进程的运行时间,即进程被调度执行的时间。Reds
- 进程上执行的归约次数。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
。