Трассировка выполнения
go tool trace для анализа на уровне горутин
«Трассировка выполнения» — бесплатный урок Go Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.
Что такое трассировка выполнения
Трассировщик выполнения Go записывает временную шкалу планирования горутин, событий сборки мусора, системных вызовов и роста кучи. Он даёт визуальное представление о параллельности и задержках, недоступное в профилях CPU или кучи.
Снятие трассировки
Снимите трассировку через конечную точку HTTP:
curl http://localhost:6060/debug/pprof/trace?seconds=5 -o trace.out
go tool trace trace.outТрассировка в файл
Используйте runtime/trace, чтобы программно записать трассировку:
f, _ := os.Create("trace.out")
trace.Start(f)
defer trace.Stop()
// run workloadgo test -trace
Снимите трассировку во время запуска тестов или Benchmark:
go test -trace trace.out -bench=. ./...
go tool trace trace.outПросмотр трассировки
Средство просмотра трассировки (go tool trace) открывается в браузере и показывает временные шкалы горутин, события сборки мусора, размер кучи и трассировки стеков каждой горутины в любой момент времени.
Анализ горутин
Представление анализа горутин группирует горутины по функциям и показывает, сколько времени каждая из них проводит в состояниях: выполняется, готова к выполнению (ожидает P), заблокирована (каналом, мьютексом или системным вызовом) и приостановлена.
Поиск задержек планировщика
Большое время в состоянии "runnable" означает, что горутины готовы к выполнению, но не запланированы. Это указывает на слишком большое количество горутин, конкурирующих за P из GOMAXPROCS, или на нехватку CPU у процесса.
Влияние сборки мусора
Паузы сборки мусора с остановкой мира отображаются серыми полосами на всех горутинах. Длительные или частые паузы сборки мусора указывают на чрезмерное количество выделений — используйте профилирование кучи, чтобы сократить их.
Пользовательские аннотации
Добавляйте пользовательские интервалы в трассировку с помощью trace.WithRegion и trace.Log, чтобы отмечать собственные участки кода и упростить анализ.
trace.WithRegion(ctx, "parse request", func() {
parseRequest(req)
})Задача и регион
trace.NewTask объединяет связанные регионы в именованную задачу, позволяя измерять сквозную задержку логической операции, выполняющейся в нескольких горутинах.
ctx, task := trace.NewTask(ctx, "handle request")
defer task.End()Трассировка и профилирование
Профиль CPU: какие функции потребляют CPU с течением времени. Профиль кучи: какие функции выделяют память. Трассировка: когда горутины выполняются и блокируются, а также как между ними происходит сборка мусора — разные инструменты для разных вопросов.
Быстрая проверка
Что означает состояние горутины "runnable" в трассировке выполнения?
Итоги: трассировка выполнения
Основные положения:
- go tool trace показывает временные шкалы горутин, события сборки мусора и планирование
- Снимайте трассировку через конечную точку HTTP или пакет runtime/trace
- Время в состоянии runnable → конкуренция за планировщик; паузы сборки мусора → чрезмерные выделения памяти
- Пользовательские аннотации (WithRegion, NewTask) отмечают собственные участки кода
Часто задаваемые вопросы
Урок «Трассировка выполнения» бесплатный?
Да — полный текст урока «Трассировка выполнения» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.
Чему я научусь в уроке «Трассировка выполнения»?
go tool trace для анализа на уровне горутин Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Go Academy?
Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Трассировка выполнения»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Go Academy?
Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Написание тестов производительности с testing.B
- Профилирование CPU с pprof
- Профилирование кучи и выделения памяти
- Трассировка выполнения