Examining Erlang crash dumps - how to account for

2020-02-12 15:30发布

问题:

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, OldHeap, 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.

回答1:

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.