运行我的 Erlang 应用程序时收到此错误报告。
崩溃转储被写入:erl_crash.dump
eheap_alloc:无法分配 18446744071692551144 字节的内存(“堆”类型)。
这是一个在简单 PC 上运行的简单程序。怎么可能得到这样的数字?顺便说一下,它正在尝试分配 10^10 gb。该程序基本上只运行尾递归和相当少量的进程。
运行我的 Erlang 应用程序时收到此错误报告。
崩溃转储被写入:erl_crash.dump
这是一个在简单 PC 上运行的简单程序。怎么可能得到这样的数字?顺便说一下,它正在尝试分配 10^10 gb。该程序基本上只运行尾递归和相当少量的进程。
如果您在运行应用程序时遇到此错误,这意味着您的一个函数正在递归调用并尝试分配操作系统无法提供给 VM 的那么多内存,因此 VM 因该内存分配错误而崩溃。
以前我遇到类似的转储时,它是由一个进程中的一个巨大的邮箱引起的,它已经堆积了数百万条消息。
您可以使用以下代码片段进行检查:
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).