-module(memory_show). -compile(export_all). show(N) -> F = fun(P) -> case catch process_info(P, [memory, dictionary]) of [{_, Memory}, {_, Dict}] -> InitStart = util:prop_get_value('$initial_call', Dict, null), {InitStart, Memory}; _ -> {null, 0} end end, Infos1 = lists:map(F, processes()), Infos2 = [{Name, M} || {Name, M} <- Infos1, Name =/= null], SortFun = fun({_, M1}, {_, M2}) -> M1 > M2 end, Infos3 = lists:sort(SortFun, Infos2), Infos4 = lists:sublist(Infos3, N), [io:format("~p : ~p ~n", [Name, M]) || {Name, M} <- Infos4], ok. show(N, SkipNames) -> F = fun(P) -> case catch process_info(P, [memory, dictionary]) of [{_, Memory}, {_, Dict}] -> InitStart = util:prop_get_value('$initial_call', Dict, null), case catch tuple_to_list(InitStart) of [Name | _] -> case lists:member(Name, SkipNames) of true -> {null, 0}; false -> {InitStart, Memory} end; _ -> {null, 0} end; _ -> {null, 0} end end, Infos1 = lists:map(F, processes()), Infos2 = [{Name, M} || {Name, M} <- Infos1, Name =/= null], SortFun = fun({_, M1}, {_, M2}) -> M1 > M2 end, Infos3 = lists:sort(SortFun, Infos2), Infos4 = lists:sublist(Infos3, N), [io:format("~p : ~p ~n", [Name, M]) || {Name, M} <- Infos4], ok. show1(N) -> F = fun(P, Acc) -> case catch process_info(P, [memory, dictionary]) of [{_, Memory}, {_, Dict}] -> InitStart = util:prop_get_value('$initial_call', Dict, null), case lists:keyfind(InitStart, 1, Acc) of false -> [{InitStart, Memory, 1} | Acc]; {InitStart, Memory1, Num} -> lists:keystore(InitStart, 1, Acc, {InitStart, Memory + Memory1, Num + 1}) end; _ -> Acc end end, Infos1 = lists:foldl(F, [], processes()), Infos2 = [{Name, M, Num} || {Name, M, Num} <- Infos1, Name =/= null], SortFun = fun({_, M1, _}, {_, M2, _}) -> M1 > M2 end, Infos3 = lists:sort(SortFun, Infos2), Infos4 = lists:sublist(Infos3, N), [io:format("~p : per_memory=~p process_num=~p ~n", [Name, (M div Num), Num]) || {Name, M, Num} <- Infos4], ok.