Elixir / BEAM runtime
v0.1.7Diagnostics for Elixir and Erlang/BEAM applications on the runner host or inside Docker containers: toolchain versions, EPMD registrations, BEAM OS process state, Linux /proc memory and process-tree detail, release RPC snapshots, supervisor/process/ETS/allocator/scheduler/port introspection, binary-leak checks, and bounded recon_trace call tracing. Releases are discovered from running BEAM processes; target one by release name, or by container for a release inside Docker.
erl
elixir
epmd
bash
Install
emisar pack install
fetches this pack, re-validates it, and verifies its content hash against the
--hash
below — the exact bytes this page was rendered against, so a tampered copy is
rejected — before copying it into the runner's packs dir. The command reloads a
running daemon itself; no manual restart.
sudo emisar pack install elixir-beam --hash sha256:5898ebdadb43f7a39957df2943c55d18693ec8c851e07d20d7ca7ce68d50b51c
Setup
Inspects Elixir/Erlang runtime state on the runner host and inside Docker containers. No node cookies or application credentials are needed: release actions go through the release's own bin/RELEASE_NAME control script, discovered from the running BEAM process (start with beam.release_targets).
Environment
Set these on the runner host, then add each name to
execution.inherit_env
so the value reaches the action.
-
ELIXIR_RELEASE_CTLOptional override pinning the release control script path, for example
/opt/my_app/bin/my_app(with a container argument, the path inside the container). Only needed when discovery cannot see the release; add it to the runner'sinherit_env. The release/container action arguments take precedence.
Notes
- Release actions discover running releases from BEAM process command lines and only ever execute <release_root>/bin/<release_name> of a release that is already running — callers select among live releases but cannot point actions at arbitrary binaries.
- When several releases run on one target, pass the release argument (names come from beam.release_targets). For a release inside Docker, pass the container argument; the runner uid then needs the docker CLI and Docker socket access.
-
The runner uid must be able to read
/procentries for the target BEAM process; otherwise Linux may hide another user's process details. - Release RPC actions execute fixed, pack-authored expressions only; callers cannot supply arbitrary Elixir code.
- If the release control script evaluates runtime config during rpc, the runner service must inherit the same runtime env the release script needs, or those actions will fail before connecting. With the container argument this usually just works: docker exec runs with the container's configured environment.
- beam.release_pid reports the PID inside the container's namespace when container is set, not the host PID (find the host PID with beam.processes).
- The recon-powered actions (allocators, binary_leak, scheduler_usage, recon_trace) need recon compiled into the release and fail with a clear message otherwise; check with beam.release_debug_tools. The recon_trace action is high-risk because tracing adds runtime overhead and can expose function arguments or return values when explicitly enabled.
- There is deliberately no action launching the interactive observer_cli TUI; its dashboards are covered by the release_* snapshot actions (top_processes, ets_tables, allocators, scheduler_usage, ports, memory).
Verify it works
Runs beam.release_targets, a low-risk
read that confirms the pack can reach its target. Run it on the host once the pack
is installed; pack install runs it for
you.
sudo emisar pack verify elixir-beam
Install and configure a pack walks through the whole sequence on a host.
Actions 25 total
View on GitHub-
beam.elixir_version exec low Low — read-only or trivially reversible
elixir --version
Show the installed Elixir and Erlang/OTP versions.
View source on GitHub -
beam.epmd_names exec low Low — read-only or trivially reversible
epmd -names
List Erlang nodes registered with the local EPMD daemon.
View source on GitHub -
beam.erl_system_version exec low Low — read-only or trivially reversible
Erlang/OTP system version
Show the installed Erlang/OTP system version.
View source on GitHub -
beam.process_limits exec low Low — read-only or trivially reversible
BEAM process limits
Show Linux resource limits for a BEAM process.
View source on GitHub -
beam.process_memory script low Low — read-only or trivially reversible
BEAM process memory summary
Show Linux /proc memory, fd, thread, and mapping counts for a BEAM process.
View source on GitHub -
beam.process_status exec low Low — read-only or trivially reversible
BEAM /proc status summary
Show selected /proc/PID/status fields for a BEAM process.
View source on GitHub -
beam.process_tree script low Low — read-only or trivially reversible
BEAM process tree
Show ancestors and descendants for a BEAM OS process without command-line arguments.
View source on GitHub -
beam.processes exec low Low — read-only or trivially reversible
BEAM process list
List BEAM and Elixir OS processes on the runner host.
View source on GitHub -
beam.recon_trace_calls script high High — service-affecting
Bounded recon_trace call capture
Trace calls to one existing module/function in the running Elixir release for a bounded time window; tracing adds load while active, and the include_args / include_return flags copy raw arguments and returns — routinely secret-bearing — into the recorded output.
View source on GitHub -
beam.recon_trace_clear script medium Medium — changes state, easily reversible
Clear recon_trace tracing
Stop all recon_trace tracing in the running Elixir release.
View source on GitHub -
beam.release_allocators script low Low — read-only or trivially reversible
Elixir release memory allocators
Show BEAM memory allocator utilization for the running Elixir release with recon_alloc — allocated vs used bytes, the usage ratio, and a per-allocator breakdown for fragmentation analysis. Requires recon in the release (check with beam.release_debug_tools).
View source on GitHub -
beam.release_applications script low Low — read-only or trivially reversible
Elixir release applications
List started OTP applications in the running Elixir release.
View source on GitHub -
beam.release_binary_leak script medium Medium — changes state, easily reversible
Elixir release binary leak check
Check the running Elixir release for refc binary leaks with recon bin_leak — garbage-collects every process and reports which freed the most binary references. Requires recon in the release (check with beam.release_debug_tools).
View source on GitHub -
beam.release_debug_tools script low Low — read-only or trivially reversible
Elixir release debug tools
Check whether recon, recon_trace, and observer_cli modules are available in the running release.
View source on GitHub -
beam.release_ets_tables script low Low — read-only or trivially reversible
Elixir release ETS tables
List ETS tables in the running Elixir release sorted by memory or row count, with owner, type, and a total-usage summary.
View source on GitHub -
beam.release_memory script low Low — read-only or trivially reversible
Elixir release memory snapshot
Show BEAM memory categories and core counts from the running Elixir release.
View source on GitHub -
beam.release_pid script low Low — read-only or trivially reversible
Elixir release OS PID
Show the OS PID of the running Elixir release (the PID inside the container's namespace when container is set).
View source on GitHub -
beam.release_ports script low Low — read-only or trivially reversible
Elixir release BEAM ports
Count open BEAM ports in the running Elixir release by driver, with the port limit — spot socket or port leaks at a glance.
View source on GitHub -
beam.release_process_info script low Low — read-only or trivially reversible
Elixir release process info
Show selected process_info fields for one BEAM PID in the running release.
View source on GitHub -
beam.release_registered script low Low — read-only or trivially reversible
Elixir release registered processes
List registered processes in the running Elixir release with lightweight process info.
View source on GitHub -
beam.release_runtime script low Low — read-only or trivially reversible
Elixir release runtime snapshot
Show a BEAM runtime snapshot from the running Elixir release.
View source on GitHub -
beam.release_scheduler_usage script low Low — read-only or trivially reversible
Elixir release scheduler usage
Show per-scheduler utilization of the running Elixir release sampled over a bounded window with recon scheduler_usage — the accurate BEAM CPU picture, unlike OS-level CPU of busy-waiting schedulers. Requires recon in the release (check with beam.release_debug_tools).
View source on GitHub -
beam.release_supervisor_tree script low Low — read-only or trivially reversible
Elixir release supervisor tree
Show a bounded supervisor subtree from the running Elixir release.
View source on GitHub -
beam.release_targets script low Low — read-only or trivially reversible
Debuggable Elixir releases
List running Elixir releases on the runner host and inside running Docker containers, with the release and container values to pass to the other beam.release_* actions.
View source on GitHub -
beam.release_top_processes script low Low — read-only or trivially reversible
Elixir release top BEAM processes
List top BEAM processes in the running release by memory, mailbox length, reductions, or heap size.
View source on GitHub