Examining Erlang crash dumps - how to account for all memory?
I've been poring over this Erlang crash dump where the VM has run out of heap memory. The problem is that there is no obvious culprit allocating all that memory.
Using some serious black awk
magic I've summed up the fields Stack+heap
, OldH开发者_运维技巧eap
, Heap unused
and OldHeap unused
for each process and ranked them by memory usage. The problem is that this number doesn't come even close to the number that is representing the total memory for all the processes processes_used
according to the Erlang crash dump guide.
I've already tried the Crashdump Viewer and either I'm missing something or there isn't much help there for my kind of problem.
The number I get is 525 MB whereas the processes_used
value is at 1348 MB. Where can I find the rest of the memory?
Edit: The Heap unused
and OldHeap unused
shouldn't have been included since they are a sub-part of Stack+Heap
and OldHeap
, that plus the fact that the number displayed for Stack+Heap
and OldHeap
are listed as number of words, not bytes, was the problem.
There is an module called crashdump_viewer which is great for these kinds of analysis.
Another thing to keep in mind is that Heap+Stack is afaik in words, not bytes which would mean that you have to multiply Heap+Stack with 4 on 32 and 8 on 64 bit. Can't find a reference in the manual for this but Processes talks about it a bit.
精彩评论