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