Go Wiki:heapdump13

其他版本的堆转储格式

简介

Go 1.3 添加了一个 runtime/debug.WriteHeapDump 函数,该函数将堆中的所有对象以及其他信息(根、goroutine、终结器等)写入文件。此文件的格式在此处指定。

详细信息

文件以字符串“go1.3 heap dump\n”的字节开头。

文件的其余部分是一系列记录。记录可以是几种不同的类型。记录将包含以下基元

每条记录都以一个 uvarint 编码的整数开头,该整数描述记录的类型

每条记录的剩余字段都与类型相关,如下所述。

EOF

EOF 记录没有字段,并且必须最后出现。

对象

对于数组或通道类型,类型必须非零。

内容字符串的大小是包含的 sizeclass 的大小,而不是类型本身的大小。因此,内容大小可能比类型大小稍大。对于数组和通道类型,它可能会大很多。例如,具有 n 个元素的数组的内容大小将大于或等于类型大小的 n 倍。

其他根

类型

goroutine (G)

可能的状态

在所有情况下都必须有等待字段,但只有在状态为“等待”时它们才有意义。

堆栈帧

转储参数

终结器

此终结器已在运行时系统中注册,但它引用的对象在最近的 GC 中可达,或在最近的 GC 之后分配。

itab

操作系统线程 (M)

memstats

转储 MemStats 的前 26 个字段。所有字段均使用 uvarint 转储,除了第 25 个字段,它使用 256 个 uvarint 转储。

queuedfinalizer

此终结器已准备好运行 - 它引用的对象不可达。运行时系统只是还没有运行它。

data

bss

格式与 data 相同,但适用于 bss 段。

defer

panic

分配/释放概要文件记录

分配样本记录


此内容是 Go Wiki 的一部分。