[erlang-questions] Early Out of Memory
Vance Shipley
vances@REDACTED
Fri Mar 1 14:19:48 CET 2013
Yes, sorry, I forgot to say that there is 5GB of free memory during this
time as reported by vmstat.
On Mar 1, 2013 6:46 PM, "Danil Zagoskin" <z@REDACTED> wrote:
> Vance, and what do you expect?
>
> Function consumes memory, VM allocates more memory.
> On each iteration function consumes small amount of memory, but this does
> not mean VM requests memory from OS on each iteration.
> VM has some pre-allocated memory, and when almost all of it is used, VM
> allocates next large block.
>
> So, when there is already allocated 15.5 GB of available 16 and VM wants
> to allocate 800MB more, the call fails, saying "cannot allocate 800M".
> That's what you see in console, but it does not say how much is already
> used.
>
>
> 2013/3/1 Vance Shipley <vances@REDACTED>
>
>> On Fri, Mar 01, 2013 at 10:33:35AM +0100, Patrik Nyblom wrote:
>> } Looks like you're running a 32 bit VM, in which case you have at a
>> } absolute maximum 4GB of memory. A heap allocation of 1.3 GB means
>> } an old version of the heap of possibly the same size (copying GC) +
>> } old heap generations and so on. A heap also needs to have
>> } continuous virtual memory, so the chance of having a single process
>> } with this much heap running on a 32bit VM is slim at best. If you
>> } have a lot of physical memory in the machine, run a 64bit OS and a
>> } 64bit Erlang VM.
>>
>> Patrik,
>>
>> Fair enough, I didn't realize that I had forgotten to build R16B as
>> 64 bit on my MacBook Pro. When I did the test happily used up all
>> 16GB of physical memory and 10GB of swap before I killed it.
>>
>> But can you explain this one?:
>>
>> Erlang R16B (erts-5.10.1) [source] [64-bit halfword] [smp:8:8]
>> [async-threads:10] [kernel-poll:false]
>>
>> Eshell V5.10.1 (abort with ^G)
>> 1> F = fun(F, Acc) -> F(F, [lists:seq(1,1000) | Acc]) end.
>> #Fun<erl_eval.12.17052888>
>> 2> F(F, []).
>>
>> Crash dump was written to: erl_crash.dump
>> eheap_alloc: Cannot allocate 790960704 bytes of memory (of type
>> "old_heap").
>> Aborted (core dumped)
>>
>> Above I am running an R16B 64-bit halfword emulator on a server with 6GB
>> of physical memory.
>>
>> What are the system limits with the halfword emulator? I assume that I
>> can't have a binary over 4GB. Can I have an ets table bigger than 4GB?
>>
>> --
>> -Vance
>>
>>
>> On 03/01/2013 07:09 AM, Vance Shipley wrote:
>> } In the pathological example below why is eheap_alloc failing to
>> } allocate 1.4GB of memory on a system with many more gigabytes of
>> } memory available?
>> }
>> } Erlang R16B (erts-5.10.1) [source] [smp:8:8] [async-threads:10] [hipe]
>> [kernel-poll:false]
>> }
>> } Eshell V5.10.1 (abort with ^G)
>> } 1> F = fun(F, Acc) -> F(F, [lists:seq(1,1000) | Acc]) end.
>> } #Fun<erl_eval.12.17052888>
>> } 2> F(F, []).
>> }
>> } Crash dump was written to: erl_crash.dump
>> } eheap_alloc: Cannot allocate 1366780092 bytes of memory (of type
>> "heap").
>> } Abort trap: 6
>>
>> _______________________________________________
>> erlang-questions mailing list
>> erlang-questions@REDACTED
>> http://erlang.org/mailman/listinfo/erlang-questions
>>
>
>
>
> --
> ---------------------------------------------
> Данил Загоскин | +7 906 064 20 47 | z@REDACTED
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20130301/4acda68c/attachment.htm>
More information about the erlang-questions
mailing list