首页 > 解决方案 > 无法在堆上分配 - 但内存在那里

问题描述

我正在追逐一个问题:每隔几天我的系统就会崩溃

Slogan: eheap_alloc: Cannot allocate 600904 bytes of memory (of type "heap").
System version: Erlang/OTP 22 [erts-10.5.4] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1] [hipe]

我曾经遇到过一些OOM 情况,但它们是由例如导致消息队列填满整个内存的无限循环引起的。这一次是不同的。cdv 报告崩溃时的内存使用量为 6081 MB。该系统在具有 14GB RAM 的 VM 上运行,该 VM 上没有其他内容。内存监控显示 6GB 级别的稳定使用情况与故障转储一致。所以在崩溃的那一刻,Beam 仍有 8GB 可用,但它无法分配 600k。

不确定这是否相关,但系统使用的大部分内存都在一个 Mnesia ETS 表中——崩溃时它是 5631 MB。

任何人都知道 Erlang 无法分配内存的可能原因,尽管仍有很多可用的内存?

标签: erlangbeam

解决方案


推荐阅读