任何人都可以解释这个Erlang Crash转储吗?

时间:2013-12-03 21:54:11

标签: erlang heap erlang-shell erlang-ports wxerlang

运行我的Erlang应用程序时收到此错误报告。


崩溃转储被写入:erl_crash.dump

eheap_alloc:无法分配18446744071692551144字节的内存(“堆”类型)。

这是一个在简单PC上运行的简单程序。怎么可能得到这样的数字?它试图分配10 ^ 10 GB的方式。该程序基本上只运行尾递归和相当少的进程。

2 个答案:

答案 0 :(得分:3)

如果在运行应用程序时遇到此错误,则意味着您的某个函数正在递归调用并尝试分配操作系统无法提供给VM的大量内存,因此VM会因内存分配错误而崩溃。

答案 1 :(得分:0)

以前当我遇到类似的转储时,它是由一个进程中的巨大邮箱引起的,它已经堆积了数百万条消息。

您可以使用以下代码片段进行检查:

top() ->
    Procs = lists:foldl(fun(Pid, Acc) ->
        case erlang:process_info(Pid, message_queue_len) of
            {_K, V} -> [{Pid, V} | Acc];
            _ -> Acc
        end
    end, [], erlang:processes()),
    lists:keysort(2, Procs).