Проверяет практический опыт поддержки продакшн-сервисов.
Утечки горутин возникают, когда горутина навсегда блокируется. Их находят через pprof (goroutine profile) и устраняют с помощью контекста, таймаутов и корректного завершения каналов.
Горутина считается “утекшей”, если она:
ждёт данные из канала, в который никто не пишет;
ждёт mutex, который никогда не освободится;
выполняет бесконечный цикл без условий выхода.
Как обнаружить:
Подключить pprof
Посмотреть профиль:
go tool pprof http://localhost:6060/debug/pprof/goroutineИщем:
одинаковые stack trace;
большое количество “waiting on channel”.
Как устранять:
всегда передавать context.Context;
проверять <-ctx.Done() в циклах;
закрывать каналы;
добавлять таймауты к IO/DB операциям.