0Pricing
Go Academy · Урок

Трассировка выполнения

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 workload

go 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 — локальная установка не требуется.

Все уроки этого курса

  1. Написание тестов производительности с testing.B
  2. Профилирование CPU с pprof
  3. Профилирование кучи и выделения памяти
  4. Трассировка выполнения
← Назад к Go Academy