English | 中文
Goref 是一个基于 Delve 的 Go 堆对象引用分析工具。
它可以显示 Go 内存引用的空间和对象数量分布,有助于高效地定位内存泄漏问题或查看持久化的堆对象以优化 GC 开销。
$ go install github.com/cloudwego/goref/cmd/grf@latest
Attach 到一个运行中的进程,然后使用 go pprof 工具打开输出文件。
$ grf attach ${PID}
successfully output to `grf.out`
$ go tool pprof -http=:5079 ./grf.out
请务必知悉
grf attach会暂停程序直至命令退出。
打开的 HTML 页面会显示堆内存的引用分布。你可以选择查看 "inuse space" 或 "inuse objects"。
例如,从一个 测试程序 中采集的堆内存引用分布如下所示,它反映了对象创建的调用栈分布。
使用 goref 工具,你可以看到 GC 可达的堆对象的内存引用分布,从而快速定位持有引用的实际代码位置。
它还支持分析 core 文件,例如:
$ grf core ${execfile} ${corefile}
successfully output to `grf.out`
- 可执行文件: go1.19 ~ go1.26
- 编译 goref 工具: >= go1.21
感谢 Delve 提供的优秀 go 调试器。


