erlang中检查内存泄露

最近项目内存占用过多,检查一下erlang的内存使用状况。shell

1. 经过etop能够很方便得出erlang内存使用的状况spa

spawn(fun() -> etop:start([{output, text}, {interval, 5}, {lines, 20}, {sort, memory}]) end).

能够定义显示的时间、行数、按照内存使用的大小排列。code

2.通常状况etop都能很稳定地工做,但个别极端状况下,etop会使用不了。这个状况下,只能上命令:orm

RawList = [{Pid, element(2, erlang:process_info (Pid, memory))} ||  Pid <- processes ()].
SortList = lists:reverse(lists:keysort(2, RawList)).
rp(lists:sublist(SortList, 20)).

上面2个方法均可以找出最占用内存的20个进程。blog

接着咱们就能够找出内存的内存状况。进程

假设一个内存pid为<0.928.0>,在shell终端中使用rp()打印全部信息。内存

rp(erlang:process_info(pid(0, 928, 0))).

若是进程信息比较大,直接输出到文件:element

file:write_file("process_info.txt", [io_lib:format("~p", [erlang:process_info(pid(0, 928, 0))])]).

注意:上面写入文件,若是进程使用的内存过大,会致使上线的项目崩溃,慎用。it

上面能够获取到进程的进程字典信息,但进程的状态信息不在这里。io

获取进程的状态信息:

rp(erlang:process_info(pid(0, 928, 0), backtrace)).

上面这个方法占用内存不多,能够快速定位进程的当前状态的信息,建议第一时间使用。  

相关文章
相关标签/搜索