我无法理解Erlang崩溃和重启的原因。我正在运行Ejabberd服务器,它的日志文件夹总是充满了erl_crash_xxxx.dump文件。我该如何调试此问题。
以下是erlang.log文件的一小部分:
=CRASH REPORT==== 4-Sep-2013::19:44:51 ===
crasher:
initial call: ejabberd_http:init/2
pid: <0.15614.15>
registered_name: []
exception exit: {normal,
{gen_fsm,sync_send_all_state_event,
[<0.15454.15>,
{http_put,2020093061,
[{"xmlns",
"http://jabber.org/protocol/httpbind"},
{"rid","2020093061"},
{"sid",
"26820e4cd7d331de864b857d1ef3351caf7dbac5"}],
[],115,1,[],
{{49,205,148,16},56132}},
30000]}}
in function gen_fsm:sync_send_all_state_event/3
in call from ejabberd_http_bind:http_put/7
in call from ejabberd_http_bind:handle_http_put/7
in call from ejabberd_http:process/2
in call from ejabberd_http:process_request/1
in call from ejabberd_http:process_header/2
in call from ejabberd_http:receive_headers/1
ancestors: [ejabberd_http_sup,ejabberd_sup,<0.37.0>]
messages: []
links: [<0.274.0>,#Port<0.1519795>]
dictionary: []
trap_exit: false
status: running
heap_size: 2584
stack_size: 24
reductions: 1082
neighbours:
这些是典型故障转储文件的前几行:
=erl_crash_dump:0.1
Tue Sep 3 16:31:47 2013
Slogan: Kernel pid terminated (application_controller) ({application_start_failure,kernel,{shutdown,{kernel,start,[normal,[]]}}})
System version: Erlang R14B04 (erts-5.8.5) [source] [64-bit] [rq:1] [async-threads:0] [hipe] [kernel-poll:false]
Compiled: Wed Oct 5 17:25:18 2011
Taints:
Atoms: 4699
=memory
total: 21498768
processes: 556368
processes_used: 541208
system: 20942400
atom: 322177
atom_used: 302233
binary: 18216
code: 2165726
ets: 53736
=hash_table:atom_tab
size: 3203
used: 2471
答案 0 :(得分:0)
那些'崩溃'可能完全不相关。您在日志文件中看到的'= CRASH REPORT ='是一种“正常”或预期的崩溃,因此由主管处理。您发布的一个是在HTTP调用的处理程序内部崩溃,同时创建或发送可能最终处于某种不可预测状态的响应(例如,当发送过程不再存在时 - 虽然不确定)。 Erlang的构建和设计可以优雅地处理此类崩溃。换句话说,您的ejabberd仍在运行并愉快地提供请求。
另一个是故障转储,它是由Erlang运行时的真正崩溃引起的。例如,如果托管运行时的计算机内存不足,则可能会发生这种情况。在您的情况下,它似乎是一个配置错误,节点根本无法正确启动。请参阅http://www.ejabberd.im/node/872。