Пакет 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, необходимо зарегистрировать обработчики в используемом вами мультиплексоре.
Параметры
Параметры можно передавать через параметры запроса 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
Или для просмотра профиля блокировок горутин после вызова runtime.SetBlockProfileRate в программе:
go tool pprof http://localhost:6060/debug/pprof/block
Или для просмотра владельцев мьютексов, за которые идёт конкуренция, после вызова 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://go.dev/blog/pprof.
Указатель
Файлы пакета
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". На запрос к "/debug/pprof/" Index отвечает HTML-страницей со списком доступных профилей.
func Profile
func Profile(w http.ResponseWriter, r *http.Request)
Profile возвращает профиль ЦП в формате pprof. Профилирование длится указанное в параметре GET seconds количество секунд или 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 seconds количество секунд или 1 секунду, если параметр не задан. При инициализации пакета этот обработчик регистрируется по адресу /debug/pprof/trace.
© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/net/http/pprof/