一个全新的 Go pprof 视角 - 对象引用分析
在Go语言开发中,内存泄漏问题往往难以定位,传统的Pprof工具虽然能提供一定帮助,但在复杂场景下其能力有限。为了更高效地分析和解决这些问题,CloudWeGo 团队开发了一款新的工具------Goref。Goref 基于 Delve,能够深入分析Go程序的堆对象引用,显示内存引用的分布,帮助开发者快速定位内存泄漏或优化GC开销。该工具不仅支持运行时进程的分析,还能分析核心转储文件,为 Go 开发者提供了一个强大的内存分析工具。项目已开源在 GitHub 上,欢迎社区贡献和使用。 Pprof 的局限性 作为 Go 研发有时会遇到内存泄露的情况,大部分人第一时间会尝试打一个 heap profile 看问题原因。但很多时候,heap profile 火焰图对问题排查起不到什么帮助,因为它只记录了对象是在哪创建的。在一些复杂业务场景下,对象经过多层依赖传递或者内存池复用,几乎已经无法根据创建的堆栈信息定位根因。 以如下 heap profile 为例,FastRead 函数栈是 Kitex 框架反序列化函数,如果业务协程泄露了请求对象,实际上并不能反映到对应泄露的代码位置,而只能体现在 ...