Post Thumbnail

В Go 1.27 в runtime/pprof добавляется встроенный детектор утечек горутин, принятый из предложения Uber.

В отличие от uber-go/goleak, который работает только в тестах и дает ложные срабатывания на живом сервере, новый профиль goroutineleak через сборщик мусора доказывает, что горутина навсегда заблокирована когда канал/лок недостижим ни для одной работающей горутины, гарантируя отсутствие ложных срабатываний.

Профиль доступен через стандартные четыре способа: вызов pprof.Lookup("goroutineleak").WriteTo(...) из кода, в тестах с самописными verifyNone/verifyTestMain, по HTTP через /debug/pprof/goroutineleak и через go tool pprof.

При этом есть нюанс - детектор не ловит все возможные утечки. Некоторые горутины могут оставаться незамеченными, если их канал формально достижим через глобальные переменные или локальные переменные работающих горутин, хотя фактически он никогда не будет разблокирован.

Похожее

Post Thumbnail

Рефлексия

Статья о том, как устроен пакет reflect в Go. Он, кстати, не вычисляет как-то хи...