cloudwego/goref

Go heap object reference analysis tool

Go

1,026

41 commits

updated Mar 24, 2026

See the code

README

Goref

English | 中文

WebSite License

Goref is a Go heap object reference analysis tool based on delve.

It can display the space and object count distribution of Go memory references, which is helpful for efficiently locating memory leak issues or viewing persistent heap objects to optimize the garbage collector (GC) overhead.

Installation

$ go install github.com/cloudwego/goref/cmd/grf@latest

Usage

Attach to a running process with its PID, and then use go pprof tool to open the output file.

$ grf attach ${PID}
successfully output to `grf.out`
$ go tool pprof -http=:5079 ./grf.out

Please be aware that grf attach will suspend the program until the command exits.

The opened HTML page displays the reference distribution of the heap memory. You can choose to view the "inuse space" or "inuse objects".

For example, the heap profile sampled from a testing program is shown below, which reflects the call stack distribution of object creation.

img_v3_02gq_63631612-6f2d-40ce-8f98-a4e52682ef7g

By using the goref tool, you can see the memory reference distribution of heap objects reachable by GC, thereby quickly pinpointing the actual code locations holding references.

img_v3_02gq_53dc2cff-203a-4c06-9678-aae49da4754g

img_v3_02gq_54551396-a4ae-42b8-996f-1b1699d381dg

It also supports analyzing core files, e.g.

$ grf core ${execfile} ${corefile}
successfully output to `grf.out`

Go Version Constraints

  • Executable file: go1.19 ~ go1.26
  • Compile goref tool: >= go1.21

Docs

How it Works | Advanced Usage

Credit

Thanks to Delve for providing powerful golang debugger.

cloudwego/goref

Go heap object reference analysis tool

Go

1,026

41 commits

updated Mar 24, 2026

See the code

README

Goref

English | 中文

WebSite License

Goref is a Go heap object reference analysis tool based on delve.

It can display the space and object count distribution of Go memory references, which is helpful for efficiently locating memory leak issues or viewing persistent heap objects to optimize the garbage collector (GC) overhead.

Installation

$ go install github.com/cloudwego/goref/cmd/grf@latest

Usage

Attach to a running process with its PID, and then use go pprof tool to open the output file.

$ grf attach ${PID}
successfully output to `grf.out`
$ go tool pprof -http=:5079 ./grf.out

Please be aware that grf attach will suspend the program until the command exits.

The opened HTML page displays the reference distribution of the heap memory. You can choose to view the "inuse space" or "inuse objects".

For example, the heap profile sampled from a testing program is shown below, which reflects the call stack distribution of object creation.

img_v3_02gq_63631612-6f2d-40ce-8f98-a4e52682ef7g

By using the goref tool, you can see the memory reference distribution of heap objects reachable by GC, thereby quickly pinpointing the actual code locations holding references.

img_v3_02gq_53dc2cff-203a-4c06-9678-aae49da4754g

img_v3_02gq_54551396-a4ae-42b8-996f-1b1699d381dg

It also supports analyzing core files, e.g.

$ grf core ${execfile} ${corefile}
successfully output to `grf.out`

Go Version Constraints

  • Executable file: go1.19 ~ go1.26
  • Compile goref tool: >= go1.21

Docs

How it Works | Advanced Usage

Credit

Thanks to Delve for providing powerful golang debugger.

Project health

Latest release

v0.0.11 · Mar 2, 2026

Releases this year

2

Significant stargazers

(top 24 of 65)

Davanum Srinivas

1,111 followers · starred Jan 2025

Filippo Valsorda

9,480 followers · starred Aug 2024

Dongpo Liu

739 followers · starred Apr 2025

Egon Elbre

606 followers · starred Sep 2025