-
Notifications
You must be signed in to change notification settings - Fork 18.4k
Description
Proposal Details
My module github.com/fjl/memsize walks a data structure and computes its total referred memory size in bytes, as well as producing a report of per-type memory usage. This is meant to be used for debugging memory leaks in live programs in a similar manner to taking a profile over HTTP with pprof, and to my knowledge there exists no other comparable tool.
memsize requires access to runtime.stopTheWorld
and runtime.startTheWorld
in order to safely walk the object graph without racing with the program that is being debugged. Up until Go version 1.22, I was able to call these functions via go:linkname
. Go 1.23 disallows this, and as per #67401 only specifically approved entry points can be linkname'd.
Please allow access to runtime.stopTheWorld
and runtime.startTheWorld
by adding a go:linkname
directive for Go 1.23.
Alternatively, we could consider adding an exposed API, perhaps in package runtime/debug
, to perform a similar task. I could envision something like:
func WithWorldStopped(reason string, f func())
Perhaps access to stopTheWorld
/startTheWorld
could be granted temporarily during the Go 1.23 cycle while we work out a replacement API.
xref fjl/memsize#4
xref #67401