Packages

Some code to trigger garbage collection in Erlang and Elixir.

Current section

Files

Jump to
garbage_man example my_long_running_process.exs
Raw

example/my_long_running_process.exs

# Start this code with `mix run example/my_long_running_process.exs`
defmodule MyLongRunningProcess do
use GenServer
require Logger
# Giving options here will change default values for `init_process_collector`.
use GarbageMan.ProcessCollector, interval: 5_000
def start_link() do
GenServer.start_link(__MODULE__, [])
end
def init(_) do
Logger.info "Starting MyLongRunningProcess process #{inspect self}"
# But you HAVE to call the `init_process_collector` function!
# :ok = init_process_collector(
# # Trigger garbage collection every 10 Seconds.
# interval: 10_000,
# # Trigger garbage collection only, if there is 500MB occupied by binary memory.
# memory_binary_max: 500_000_000,
# # Log messages to debug level.
# log_level: :debug
# )
{:ok, %{}}
end
end
# Some code to start
{:ok, pid} = MyLongRunningProcess.start_link
# The `init_process_collector` function can also be called from the outside.
:ok = MyLongRunningProcess.init_process_collector(
interval: 3_000,
memory_binary_max: 10_000,
pid: pid,
log_level: :error
)
:timer.sleep(:infinity)
# Output of this code:
#
# 11:15:43.038 [error] GarbageMan.ProcessCollector initialized for PID #PID<0.80.0>.
#
# 11:15:46.044 [error] GarbageMan.ProcessCollector collecting process #PID<0.112.0> from binary memory: 96464.
#
# 11:15:46.044 [error] GarbageMan.ProcessCollector collecting process #PID<0.112.0> to binary memory: 101152.
#
# 11:15:49.047 [error] GarbageMan.ProcessCollector collecting process #PID<0.112.0> from binary memory: 101600.
#
# 11:15:49.048 [error] GarbageMan.ProcessCollector collecting process #PID<0.112.0> to binary memory: 101768.
#
# 11:15:52.049 [error] GarbageMan.ProcessCollector collecting process #PID<0.112.0> from binary memory: 102088.
#
# 11:15:52.050 [error] GarbageMan.ProcessCollector collecting process #PID<0.112.0> to binary memory: 102216.
#
# 11:15:55.052 [error] GarbageMan.ProcessCollector collecting process #PID<0.112.0> from binary memory: 102368.
#
# 11:15:55.052 [error] GarbageMan.ProcessCollector collecting process #PID<0.112.0> to binary memory: 102496.
#
# 11:15:58.055 [error] GarbageMan.ProcessCollector collecting process #PID<0.112.0> from binary memory: 102728.
#
# 11:15:58.055 [error] GarbageMan.ProcessCollector collecting process #PID<0.112.0> to binary memory: 102856.