From 621a39be0082b8a9f7a2c18aa313eb649d162c2e Mon Sep 17 00:00:00 2001 From: Yuriy Bogdanov Date: Mon, 16 Dec 2013 21:55:59 +0200 Subject: [PATCH 1/2] add top_procs_running.erl --- top_procs_running.erl | 47 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 top_procs_running.erl diff --git a/top_procs_running.erl b/top_procs_running.erl new file mode 100644 index 0000000..04b2797 --- /dev/null +++ b/top_procs_running.erl @@ -0,0 +1,47 @@ + +% Shows which kinds of processes are running in the system (grouping by initial_call MFA) +% Useful for analyzing process leaks +% +% Example: +% +% 1> TopProcsRunning(). +% [{{proc_lib,init_p,5},12}, +% {{erlang,apply,2},8}, +% {{group,server,3},2}, +% {{application_master,start_it,4},1}, +% {{user_drv,server,2},1}, +% {{otp_ring0,start,2},1}] +% +% 2> ProcsGroupBy(current_function). +% [{{gen_server,loop,6},11}, +% {{group,server_loop,3},2}, +% {{application_master,loop_it,4},1}, +% {{user_drv,server_loop,5},1}, +% {{standard_error,server_loop,1},1}, +% {{code_server,loop,1},1}, +% {{global,loop_the_locker,1},1}, +% {{gen_event,fetch_msg,5},1}, +% {{erl_prim_loader,loop,3},1}, +% {{erl_eval,do_apply,6},1}, +% {{init,loop,1},1}, +% {{global,loop_the_registrar,0},1}, +% {{shell,shell_rep,4},1}, +% {{application_master,main_loop,2},1}] + +f(ProcsGroupBy). +ProcsGroupBy = fun(Kind) -> + Map = [proplists:get_value(Kind, process_info(Pid)) || Pid <- processes()], + + Reduce = lists:foldl(fun(Mfa, Acc) -> + dict:update_counter(Mfa, 1, Acc) + end, dict:new(), Map), + + lists:sort(fun({_, N1}, {_, N2}) -> + N2 =< N1 + end, dict:to_list(Reduce)) +end. + +f(TopProcsRunning). +TopProcsRunning = fun() -> + ProcsGroupBy(initial_call) +end. From c4e053e31c4271b132caa4ec4c0d235808691b53 Mon Sep 17 00:00:00 2001 From: Yuriy Bogdanov Date: Tue, 17 Dec 2013 14:59:17 +0200 Subject: [PATCH 2/2] add copyright --- top_procs_running.erl | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/top_procs_running.erl b/top_procs_running.erl index 04b2797..df1963d 100644 --- a/top_procs_running.erl +++ b/top_procs_running.erl @@ -1,7 +1,10 @@ - +% % Shows which kinds of processes are running in the system (grouping by initial_call MFA) % Useful for analyzing process leaks % +% Copyright 2013 by Yuriy Bogdanov +% (MIT LICENSE) +% % Example: % % 1> TopProcsRunning().