如果现在使用top命令,你发现erlang的beam.smp进程占用了很大的内存,这个时候该如何下手定为问题?
有几个思路:
- 查看内存占用top N进程,比如查看内存占用top 10的进程;
- 如果没有头绪,需要查看进程总数量和最多数量的几个进程;
步骤1对应的方法
- 使用etop
<pre>
spawn(fun() ->etop:start([{output, text}, {lines, 20}, {sort, memory}]) end).
</pre>. - 使用recon库
<pre>
recon:proc_count('memory',10)
</pre> - 自定义
<pre>
List1 = erlang:processes(),
List2 = lists:map(fun(Pid) -> {, V0} = erlang:process_info(Pid, current_function), {, V1} = erlang:process_info(Pid, memory), {V0, V1} end,List1),
lists:sort(fun({, H1}, {, H2}) -> H1 > H2 end,List2)
lists:sort(fun({, H1}, {, H2}) -> H1 > H2 end, lists:map(fun(Pid) -> {, V0} = erlang:process_info(Pid, current_function), {, V1} = erlang:process_info(Pid, memory), {V0, V1} end, erlang:processes())).
</pre>