[erlang-questions] 1PB of arg_reg - wait what?

Simon MacMullen <>
Tue May 8 16:30:11 CEST 2012


We've just had a report of a Rabbit broker dying trying to allocate 
approximately 1PB of memory:

http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2012-May/019896.html

Slogan: std_alloc: Cannot allocate 1124304355803072 bytes of memory (of 
type "arg_reg").

Which is unfortunate enough in itself - but arg_reg? My understanding of 
beam internals is not great, but that looks to be something like a stack 
frame. A 1PB stack frame?

As far as I can see "arg_reg" memory is only allocated in one place, 
around line 3100 of beam_emu.c:

https://github.com/erlang/otp/blob/maint/erts/emulator/beam/beam_emu.c#L3157

...where size is set to c_p->arity * sizeof(c_p->arg_reg[0]).

process.arg_reg is an Eterm*, so sizeof(Eterm) *cannot* be huge, so it 
must be the arity which is ~10^15. We have some excessive arities in 
RabbitMQ, but not quite to that extent.

Does anyone have any idea how this could arise, or can it just be 
chalked up to cosmic rays?

Cheers, Simon

-- 
Simon MacMullen
RabbitMQ, VMware



More information about the erlang-questions mailing list