Recon wants to be a set of tools usable in production to diagnose Erlang problems or inspect production environment safely.
To build the library:
rebar3 compile
Documentation for the library can be obtained at http://ferd.github.io/recon/
It is recommended that you use tags if you do not want bleeding edge and development content for this library.
Versions supported: OTP-17 and up. Support of R16B03-1 down to R15B02 is best effort. Builds with Rebar3 require OTP-17.1 and up because that's what the tool supports.
Branches are organized by version. master
contains the bleeding edge, 2.x
contains all stable changes up to the latest release of v2, and 1.x
contains all stable changes of the first version of Recon.
2.x
recon_alloc
(base handling of foreign_blocks
type)recon:files/0
since OTP-21 no longer supports listing all file descriptors, and removing error_logger_queue_len
from node stats since a new logging mechanism was introduced in-process instead.bin_leak
arith errorsrecon_alloc:allocators/1
(incl. R16 compatibility)term_to_pid
supports binariesreturn_to
option in recon_trace
return_trace
in recon_trace:calls/2-3
instead of fun(_) -> return_trace() end
.app_deps
script to run with rebar3 dependenciesrecon:proc_count
and recon:proc_window
.recon:port_types/0
and recon_lib:count/1
, thanks to @lucafavatellarecon_trace:calls/2
interface to allow multiple match specs, which was currently only allowed for calls/3
.mbcs_pool
data in erts_alloc
, and some internal refactoring, thanks to Lukas Larsson.recon_alloc
operations with dumps on diskrecon_trace:mfa()
type to recon_trace:tspec()
to avoid issues in older Erlang versions regarding redefining an existing type (Thanks Roberto Aloi)recon_trace
script to allow safe tracing of function calls on production nodes.queue_fun.awk
script to inspect running functions of processes with large mailboxes in a crash dump.recon_alloc
when certain expected allocators do not return results (Thanks to Michal Ptaszek)recon_alloc
.recon_alloc
, thanks to Lukas Larsson. Things that changed include:average_sizes/0
is renamed average_block_sizes/1
and now takes the keywords current
and max
.memory/1
has new options in allocated_types
and allocated_instances
.memory/2
has been added, which allows to choose between current
and max
values. memory(Term)
is made equivalent to memory(Term, current)
.sbcs_to_mbcs/0
to take the arguments current
and max
.set_unit/1
, which allows to get the recon_alloc
results in bytes (default), kilobytes, megabytes, and gigabytes, to help with readability.recon:port_info/1
no longer includes the parallelism
option by default within the meta
category as this would hurt backwards compatibility on some installations.recon:get_state/2
is added in order to specify timeouts. recon:get_state/1
keeps its 5000 milliseconds timeout.binary_memory
, which is callable in recon:info/2,4
, recon:proc_count/2
, and recon:proc_window/3
. This attribute allows to fetch the amount of memory used by refc binaries for a process, and to sort by that value for counts and windows.1.x
recon_alloc:snapshot*
functions, which allow memory allocation snapshots to be taken, saved on disk, reloaded, and analyzed on-demand. Thanks to Lukas Larsson for this functionality.parallelism
data from port_info
for better OTP backwards compatibility with little loss of information.recon_lib:term_to_port
to convert a string back to a usable port.recon:port_info/1
and recon:port_info/2
recon_alloc
moduleinfo/2
and info/4
. The memory
info type thus gets renamed to memory_used
, in order to avoid conflicts when picking between a type and a specific process attribute. Types exported by the module also get updated.app_deps.erl
to read apps/ directories for releasesbin_leak
function call.recon_lib
for the window and count functions that take a specific pid as an argument.recon:info/1
into recon_lib:term_to_pid
and allowed arbitrary terms to be used for pids in recon:get_state/1
.