我一直在研究这个Erlang崩溃转储,其中VM已经耗尽了堆内存。问题是没有明显的罪魁祸首分配所有内存。
使用一些严重的黑色awk
魔法我已经为每个进程总结了字段Stack+heap
,OldHeap
,Heap unused
和OldHeap unused
,并按其排序内存使用情况。问题是根据Erlang crash dump guide,此数字甚至不接近代表所有进程processes_used
的总内存的数字。
我已经尝试了Crashdump Viewer,要么我错过了某些内容,要么就我的问题没什么帮助。
我得到的数字是525 MB,而processes_used
的值是1348 MB。我在哪里可以找到其余的记忆?
修改:Heap unused
和OldHeap unused
不应包括在内,因为它们是Stack+Heap
和OldHeap
的子部分,加上数字这一事实显示为Stack+Heap
和OldHeap
列为单词数而非字节数是问题。
答案 0 :(得分:6)
有一个名为crashdump_viewer的模块,非常适合这类分析。
要记住的另一件事是Heap + Stack是单词,而不是字节,这意味着你必须将Heap + Stack与32位上的4和64位上的8相乘。无法在手册中找到此参考,但Processes对此进行了一些讨论。