Go 1.26 ships an experimental goroutine leak profiler (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
Go 1.26 ships an experimental goroutine leak profiler (
GOEXPERIMENT=goroutineleakprofile). It detects goroutines blocked on channels, mutexes, orconditions that can never unblock, using GC reachability analysis. Zero runtime overhead unless actively collecting.
Available at
/debug/pprof/goroutineleakwhen enabled.Proposal
Once 1.27 ships with it enabled by default:
goroutine-leakcollector toipfs diag profile --collectors(gated on the experiment being available at runtime)/debug/pprof/endpoint on the API portThis would help diagnose daemon goroutine leaks without external tooling. Useful for long-running nodes where leaked goroutines accumulate over time.
References
runtime/pprofgoroutineleak profile