Пакет pprof
Обзор
Пакет pprof предоставляет через свой HTTP-сервер данные о профилировании выполнения в формате, ожидаемом инструментом визуализации pprof.
Пакет, как правило, импортируется только для побочного эффекта регистрации его HTTP-обработчиков. Обрабатываемые пути начинаются с /debug/pprof/. Начиная с Go 1.22, все пути должны запрашиваться с помощью GET.
Для использования pprof подключите этот пакет к вашей программе:
import _ "net/http/pprof"
Если ваша программа ещё не запускает HTTP-сервер, вам нужно запустить его. Добавьте «net/http» и «log» в свои импорты и следующий код в вашу функцию main:
go func() {
log.Println(http.ListenAndServe("localhost:6060", nil))
}()
По умолчанию доступны все профили, перечисленные в runtime/pprof.Profile (через Handler), а также профили Cmdline, Profile, Symbol и Trace, определённые в этом пакете. Если вы не используете DefaultServeMux, вам нужно будет зарегистрировать обработчики с используемым вами mux.
Параметры
Параметры могут быть переданы через GET-параметры запроса:
- debug=N (все профили): формат ответа: N = 0: двоичный (по умолчанию), N > 0: текстовый
- gc=N (профиль кучи): N > 0: запустить цикл сборки мусора перед профилированием
- seconds=N (профили allocs, block, goroutine, heap, mutex, threadcreate): вернуть профили разницы
- seconds=N (профили cpu (profile), trace): профилировать заданную продолжительность
Примеры использования
Используйте инструмент pprof для просмотра профиля кучи:
go tool pprof http://localhost:6060/debug/pprof/heap
Или для просмотра профиля ЦП продолжительностью 30 секунд:
go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30
Или для просмотра профиля блокировки goroutine после вызова runtime.SetBlockProfileRate в вашей программе:
go tool pprof http://localhost:6060/debug/pprof/block
Или для просмотра держателей конкурирующих mutex после вызова runtime.SetMutexProfileFraction в вашей программе:
go tool pprof http://localhost:6060/debug/pprof/mutex
Пакет также экспортирует обработчик, который обслуживает данные трассировки выполнения для команды «go tool trace». Для сбора трассировки выполнения продолжительностью 5 секунд:
curl -o trace.out http://localhost:6060/debug/pprof/trace?seconds=5 go tool trace trace.out
Чтобы просмотреть все доступные профили, откройте http://localhost:6060/debug/pprof/ в вашем браузере.
Для изучения работы этой возможности посетите https://blog.golang.org/2011/06/profiling-go-programs.html.
Индекс
Файлы пакета
pprof.go
func Cmdline
func Cmdline(w http.ResponseWriter, r *http.Request)
Cmdline отвечает строкой командной строки запущенной программы, с аргументами, разделёнными байтами NUL. Инициализация пакета регистрирует его как /debug/pprof/cmdline.
func Handler
func Handler(name string) http.Handler
Handler возвращает HTTP-обработчик, который обслуживает указанный профиль. Доступные профили можно найти в runtime/pprof.Profile.
func Index
func Index(w http.ResponseWriter, r *http.Request)
Index отвечает профилем в формате pprof, указанным в запросе. Например, "/debug/pprof/heap" обслуживает профиль "heap". Index отвечает на запрос "/debug/pprof/" HTML-страницей, перечисляющей доступные профили.
func Profile
func Profile(w http.ResponseWriter, r *http.Request)
Profile отвечает профилем CPU в формате pprof. Профилирование длится заданное в секундах значение параметра GET, или 30 секунд, если не указано. Инициализация пакета регистрирует его как /debug/pprof/profile.
func Symbol
func Symbol(w http.ResponseWriter, r *http.Request)
Symbol ищет указанные в запросе счётчики программ, отвечая таблицей, сопоставляющей счётчики программ с именами функций. Инициализация пакета регистрирует его как /debug/pprof/symbol.
func Trace 1.5
func Trace(w http.ResponseWriter, r *http.Request)
Trace отвечает трассировкой выполнения в двоичном формате. Трассировка длится заданное в секундах значение параметра GET, или 1 секунду, если не указано. Инициализация пакета регистрирует его как /debug/pprof/trace.
© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/net/http/pprof/