erlang 在线生成crashdump

  一般说来抓dump 4种 方式:
     1. erlang:halt(“abort”).
     2. 在erlang shell下输入CTRL C + “大写的A”
     3.等着进程崩溃自己产生dump
     4.kill -SIGUSR1 <pid> (shell 无法进入时可以使用)
 
  不过4个方式无一不是需要node crash掉,如果我只想sapshot 一份进程状态以便分析呢?
  在google groups 找到答案,现在链接找不到了,分享一下:
  
crash_dump() ->
    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("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)).

erlang 的crash dump 是一个进程详细信息快照的文本文件,此方式自己拼接一个类似的文件,嗯crash_dumpviewer 会有警告,不过还是很好用。

 

转载于:https://www.cnblogs.com/lulu/p/4149217.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值