команда Go рассказала, как устроен новый тип профиля
goroutineleak. Он ищет горутины, которые навсегда зависли на канале, Mutex, WaitGroup или Cond, и делает это через тот же анализ достижимости, что и сборщик мусора: если примитив, на котором ждёт горутина, недоступен ни из одной живой горутины, разбудить её уже некому.Раньше обычный goroutine-профиль показывал только количество заблокированных, не отличая всплеск нагрузки от утечки. В примере из блога новый профиль нашёл 116 горутин, зависших на одной строке с отправкой в небуферизованный канал. Снимается по адресу
/debug/pprof/goroutineleak, если подключён net/http/pprof; команда советует снимать периодически, например раз в четыре часа, из-за квадратичного худшего случая. Что он не ловит и как включить, разобрали на сайте.