Ghostbuster
Set of useful functions to catch leaked processes in runtime.
Installation
def deps do
[
{:ghostbuster, "~> 0.1.0"}
]
end
Usage
!!!WARNING!!!
Check amount of processes on your production node! this tool uses Process.list() and Enum, so IT CAN SIGNIFICANTLY SLOW DOWN YOUR APPLICATION if you have a lot of processes, 10k of shouldn't create a problem but if you have more - run it on your own risk.
To get list of unlinked processes:
Ghostbuster.get_unlinked_pids()
#[#<0.45.0>]
To get 5 most used initial function calls
Ghostbuster.get_top_init_calls()
#[
# {{:application_master, :init, 4}, 5},
# {{:application_master, :start_it, 4}, 5},
# {{:supervisor, Supervisor.Default, 1}, 4},
# {{:gen_event, :init_it, 6}, 3},
# {{:erts_dirty_process_signal_handler, :start, 0}, 3}
#]
To get all pids with given initial call
Ghostbuster.get_pids_by_init_call({:application_master, :init, 4})
# [#<0.45.0>]
To get initical call for given pid
'<0.45.0>' |> :erlang.list_to_pid() |> Ghostbuster.get_init_call()
# {:application_master, :init, 4}