РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
998 of 1593 menu

Пакет net/http/pprof

Пакет net/http/pprof предоставляет HTTP-обработчики для профилирования Go-приложений. Он добавляет эндпоинты к вашему HTTP-серверу, через которые можно получить данные о работе программы: профили CPU, памяти, горутин, блокировок и другие. Пакет автоматически регистрирует обработчики для стандартных путей профилирования.

Подключение пакета

Для использования пакета его нужно импортировать с побочным эффектом, чтобы зарегистрировать обработчики:

import _ "net/http/pprof"

После этого обработчики будут доступны по стандартным путям, таким как /debug/pprof/, /debug/pprof/profile и другим.

Синтаксис

import _ "net/http/pprof"

Для запуска профилирования необходимо запустить HTTP-сервер с зарегистрированными обработчиками:

import ( "net/http" _ "net/http/pprof" ) func main() { http.ListenAndServe(":8080", nil) }

Доступные эндпоинты

После подключения пакета становятся доступны следующие HTTP-эндпоинты:

  • /debug/pprof/ - главная страница со списком доступных профилей
  • /debug/pprof/cmdline - командная строка запуска программы
  • /debug/pprof/profile - профиль CPU (по умолчанию 30 секунд)
  • /debug/pprof/symbol - таблица символов
  • /debug/pprof/trace - трассировка выполнения
  • /debug/pprof/heap - профиль кучи (выделения памяти)
  • /debug/pprof/goroutine - профиль горутин
  • /debug/pprof/block - профиль блокировок
  • /debug/pprof/mutex - профиль мьютексов
  • /debug/pprof/threadcreate - профиль создания потоков
  • /debug/pprof/allocs - профиль выделений памяти

Пример

Создадим простой HTTP-сервер с профилированием:

package main import ( "fmt" "net/http" _ "net/http/pprof" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello, World!") }) fmt.Println("Server started at :8080") fmt.Println("Profiling available at: http://localhost:8080/debug/pprof/") http.ListenAndServe(":8080", nil) }

Пример

Получим 30-секундный профиль CPU с помощью curl:

curl -o cpu.prof http://localhost:8080/debug/pprof/profile

Результат выполнения команды:

"% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1234 100 1234 0 0 1234 0 0:00:30 --:--:-- 0:00:30 1234"

Пример

Получим профиль кучи (выделения памяти) в формате protobuf:

curl -o heap.prof http://localhost:8080/debug/pprof/heap

Результат выполнения команды:

"% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1234 100 1234 0 0 1234 0 0:00:30 --:--:-- 0:00:30 1234"

Пример

Анализ профиля с помощью инструмента pprof:

go tool pprof -http=:8081 cpu.prof

Результат выполнения команды:

"Serving web UI on http://localhost:8081"

Смотрите также

  • пакет runtime/pprof,
    который предоставляет низкоуровневый API для профилирования
  • функцию pprof.StartCPUProfile,
    которая запускает запись CPU-профиля в файл
  • функцию pprof.StopCPUProfile,
    которая останавливает запись CPU-профиля
  • функцию pprof.Lookup,
    которая возвращает профиль по имени
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить