erlang各种有用的函数包括一些有用nif封装,还有一些性能测试case。
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 
 
 

67 rader
2.3 KiB

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