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}