检查Erlang崩溃转储 - 如何计算所有内存?

时间:2011-07-07 19:37:41

标签: debugging erlang

我一直在研究这个Erlang崩溃转储,其中VM已经耗尽了堆内存。问题是没有明显的罪魁祸首分配所有内存。

使用一些严重的黑色awk魔法我已经为每个进程总结了字段Stack+heapOldHeapHeap unusedOldHeap unused,并按其排序内存使用情况。问题是根据Erlang crash dump guide,此数字甚至不接近代表所有进程processes_used的总内存的数字。

我已经尝试了Crashdump Viewer,要么我错过了某些内容,要么就我的问题没什么帮助。

我得到的数字是525 MB,而processes_used的值是1348 MB。我在哪里可以找到其余的记忆?

修改:Heap unusedOldHeap unused不应包括在内,因为它们是Stack+HeapOldHeap的子部分,加上数字这一事实显示为Stack+HeapOldHeap列为单词数而非字节数是问题。

1 个答案:

答案 0 :(得分:6)

有一个名为crashdump_viewer的模块,非常适合这类分析。

要记住的另一件事是Heap + Stack是单词,而不是字节,这意味着你必须将Heap + Stack与32位上的4和64位上的8相乘。无法在手册中找到此参考,但Processes对此进行了一些讨论。