ipfs / ipfs/kubo

Add goroutine leak profile to `ipfs diag profile`

Open
#11,191 4 comments 0 reactions 0 assignees View on GitHub
effort/hours help wanted kind/enhancement P1
Dominant language
Go
Stars
17.1k
Forks
3.2k
Avg merge
3d 18h
Merged PRs (30d)
11

Description

Go 1.26 ships an experimental [goroutine leak profiler](https://go.dev/doc/go1.26#goroutineleak-profiles) (`GOEXPERIMENT=goroutineleakprofile`). It detects goroutines blocked on channels, mutexes, or
conditions that can never unblock, using GC reachability analysis. Zero runtime overhead unless actively collecting.

Available at `/debug/pprof/goroutineleak` when enabled.

### Proposal

Once 1.27 ships with it enabled by default:

- Add a `goroutine-leak` collector to `ipfs diag profile --collectors` (gated on the experiment being available at runtime)
- Expose it via the existing `/debug/pprof/` endpoint on the API port

This would help diagnose daemon goroutine leaks without external tooling. Useful for long-running nodes where leaked goroutines accumulate over time.

### References

- https://go.dev/doc/go1.26#goroutineleak-profiles
- `runtime/pprof` goroutineleak profile
- Expected to be enabled by default in Go 1.27

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.