谁能解释一下这个Erlang崩溃转储?

ujv3wf0j  于 2022-12-08  发布在  Erlang
关注(0)|答案(2)|浏览(212)

我在运行Erlang应用程序时收到此错误报告。
损毁倾印已写入:erl_崩溃.转储

堆分配:无法分配18446744071692551144字节的内存(类型为"heap")。

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

vawmfj5a

vawmfj5a1#

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

eufgjt7s

eufgjt7s2#

Previously when I was running into similar dumps, it was caused by a huge mailbox in a process, it had piled millions of messages.
You could check it with this snippet of code:

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).

相关问题