Как узнать time.Sleep () в пути выполнения? - PullRequest
0 голосов
/ 09 апреля 2020

Попытка выяснить вызов time.Sleep () в пути выполнения.

Чтобы упростить задачу, рассмотрите код ниже.

func BenchmarkSleep(b *testing.B) {
    for i:=0; i < b.N; i++ {
        time.Sleep(time.Millisecond * 10)
    }
}

Я попытался профилировать (процессор, заблокируйте, мьютекс) и ожидайте увидеть образцы time.Sleep в профиле.

Что мне делать.

1 Ответ

0 голосов
/ 09 апреля 2020

Вы пытались:

go test -trace trace.out

, а затем:

go tool trace trace.out

..., чтобы просмотреть его в браузере?

Затем вы можете сгенерировать профиль, похожий на pprof, из трассировки:

go tool trace -pprof=TYPE trace.out > TYPE.pprof

Поддерживаемые типы профилей:

  • net: профиль блокировки сети
  • syn c: профиль блокировки синхронизации
  • syscall: профиль блокировки syscall
  • sched: профиль задержки планировщика

И просмотрите это тоже:

go tool pprof TYPE.pprof

В общем ...

Пакет трассировки: https://golang.org/pkg/runtime/trace/

Может использоваться с инструментом трассировки: https://golang.org/cmd/trace/

Для диагностики и визуализации данных профилирования: https://golang.org/doc/diagnostics.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...