排查erlang应用vm占用内存过大的思路

如果现在使用top命令,你发现erlang的beam.smp进程占用了很大的内存,这个时候该如何下手定为问题?
有几个思路:

  1. 查看内存占用top N进程,比如查看内存占用top 10的进程;
  2. 如果没有头绪,需要查看进程总数量和最多数量的几个进程;

步骤1对应的方法

  1. 使用etop

    spawn(fun() ->etop:start([{output, text}, {lines, 20}, {sort, memory}]) end).
    .
  2. 使用recon库

    recon:proc_count('memory',10)
  3. 自定义

    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())).

你可能感兴趣的:(排查erlang应用vm占用内存过大的思路)