[erlang-questions] Creating a diagnostic memory dump of live erlang VM

Matthew Evans mattevans123@REDACTED
Fri Feb 21 04:47:58 CET 2014

I took it on myself to write a little module. This will produce a crash report that will display most of the important data that can be loaded into the crash dump viewer. From Erlang run report:crash_report(). 
The crash dump goes to /tmp/erl_crash.dump and can be viewed from Erlang via your browser when you run crashdump_viewer:start(). from your Erlang shell.

crash_report() ->    Date = erlang:list_to_binary(rfc1123_local_date()),    Header = binary:list_to_bin([<<"=erl_crash_dump:0.2\n">>,Date,<<"\nSystem version: ">>]),    Ets = ets_info(),    Report = binary:list_to_bin([Header,erlang:list_to_binary(erlang:system_info(system_version)),erlang:system_info(info),erlang:system_info(procs),Ets,erlang:system_info(dist),                <<"=loaded_modules\n">>,binary:replace(erlang:system_info(loaded),<<"\n">>,<<"\n=mod:">>,[global])]),    file:write_file("/tmp/erl_crash.dump",Report).
ets_info() ->    binary:list_to_bin([ets_table_info(T)||T<-ets:all()]).
ets_table_info(Table) ->    Info = ets:info(Table),    Owner = erlang:list_to_binary(erlang:pid_to_list(proplists:get_value(owner,Info))),    TableN = erlang:list_to_binary(erlang:atom_to_list(proplists:get_value(name,Info))),    Name = erlang:list_to_binary(erlang:atom_to_list(proplists:get_value(name,Info))),    Objects = erlang:list_to_binary(erlang:integer_to_list(proplists:get_value(size,Info))),    binary:list_to_bin([<<"=ets:">>,Owner,<<"\nTable: ">>,TableN,<<"\nName: ">>,Name,<<"\nObjects: ">>,Objects,<<"\n">>]).
rfc1123_local_date() ->    rfc1123_local_date(os:timestamp()).rfc1123_local_date({A,B,C}) ->    rfc1123_local_date(calendar:now_to_local_time({A,B,C}));rfc1123_local_date({{YYYY,MM,DD},{Hour,Min,Sec}}) ->    DayNumber = calendar:day_of_the_week({YYYY,MM,DD}),    lists:flatten(        io_lib:format("~s, ~2.2.0w ~3.s ~4.4.0w ~2.2.0w:~2.2.0w:~2.2.0w GMT",            [httpd_util:day(DayNumber),DD,httpd_util:month(MM),YYYY,Hour,Min,Sec]));rfc1123_local_date(Epoch) when erlang:is_integer(Epoch) ->    rfc1123_local_date(calendar:gregorian_seconds_to_datetime(Epoch+62167219200)).

From: vladdu55@REDACTED
Date: Thu, 20 Feb 2014 10:30:39 +0100
To: mabrek@REDACTED
CC: erlang-questions@REDACTED
Subject: Re: [erlang-questions] Creating a diagnostic memory dump of live erlang VM

On Thu, Feb 20, 2014 at 9:26 AM, Anton Lebedevich <mabrek@REDACTED> wrote:

Another thing which I missed a lot after converting from java to erlang

is a thread dump. It turned out that it's possible to get all

stacktraces for all processes (even with function arguments) via


It returns them as text so it's better to dump it to file immediately:


Format of these traces is quite interesting (undocumented) the best

description I found is in the mailing list

I might just as well ask the obvious question: why is not this information available even as normal Erlang terms, so that one doesn't need to parse it? When writing a crash dump, it doesn't matter, but if it should be used at runtime it's a pain to parse it... This applies to the other results from system_info/1 that are dumped as text.


erlang-questions mailing list
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20140220/6e9b9487/attachment.htm>

More information about the erlang-questions mailing list