zoukankan      html  css  js  c++  java
  • 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
    ">>,Date,<<"
    System 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
    ">>,binary:replace(erlang:system_info(loaded),
                                                                            <<"
    ">>,<<"
    =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,<<"
    Table: ">>,TableN,<<"
    Name: ">>,Name,
                            <<"
    Objects: ">>,Objects,<<"
    ">>]).
    
    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 会有警告,不过还是很好用。

     
  • 相关阅读:
    IIS配置(持续更新中...)
    T-SQL Table-valued Function使用分隔符将字符串转换为表
    英语中的时态
    网页内容扫描器
    20145223 杨梦云 《网络对抗》 Web安全基础实践
    20145223 杨梦云 《网络对抗》 Web基础
    20145223 杨梦云 《网络对抗》 网络欺诈技术防范
    20145223 杨梦云 《网络对抗》 信息搜集与漏洞扫描
    20145223 杨梦云 《网络对抗》 MSF基础应用
    20145223 杨梦云 《网络对抗》恶意代码分析
  • 原文地址:https://www.cnblogs.com/lulu/p/4149217.html
Copyright © 2011-2022 走看看