Erlang 进程内存占用排查
1.进入 Erlang 终端
[root@rabbitpro03-fn ~]# erl
2.查看内存占用
1> erlang:memory().
3.查看进程数量
2> erlang:system_info(process_count).
4.查看进程占用内存信息
3> spawn(fun()->etop:start([{output,text},{interval,5},{lines,20},{sort,memory}])end).
注:
output:指定输出方式
interval:内存信息刷新间隔时间
lines:显示内存记录行数
sort:排序规则(上文指令基于内存用量倒排)
5.查看指定进程详情
1> erlang:process_info(pid(0,33,0)).
参数名称 | 描述 |
---|---|
dictionary | 进程字典中所有的数据项 |
registerd_name | 注册的名字 |
status | 进程状态 |
links | 所有链接进程 |
monitored_by | 所有监控当前进程的进程 |
monitors | 所有被当前进程监控的进程 |
trap_exit | 是否捕获exit信号 |
current_function | 当前进程执行的函数,{M, F, A} |
current_location | 进程在模块中的位置,{M, F, A, [{file, FileName}, {line, Num}]} |
current_stacktrace | 以current_location的格式列出堆栈跟踪信息 |
initial_call | 进程初始入口函数,如spawn时的入口函数,{M, F, A} |
memory | 进程占用的内存大小(包含所有堆,栈等),以bytes为单位 |
message_queue_len | 进程邮箱中的待处理消息个数 |
messages | 返回进程邮箱中的所有消息,该调用之前务必通过message_queue_len确认消息条数,否则消息过多时,调用非常危险 |
reductions | 进程规约数 |
6.erlang手动GC方法
erlang:garbage_collect().
erlang:garbage_collect(pid(0,38,0)). # 指定pid