Назад к вопросам
Middle
184
questionbank

Как встроить стандартный профайлер в свое приложение на Go?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Пакет net/http/pprof предоставляет обработчики HTTP для данных профилирования.

Импортируйте его:

import (
	"net/http"
	_ "net/http/pprof" // Важно использовать '_' для инициализации side effect
)

Запустите HTTP-сервер в отдельной горутине:

go func() {
	// Запуск сервера на локальном адресе и стандартном порту pprof
	if err := http.ListenAndServe("localhost:6060", nil); err != nil {
		// Обработка ошибки запуска сервера, например логирование
		// log.Printf("pprof server failed: %v", err)
	}
}()

Теперь вы можете получить доступ к данным профилирования по адресу http://localhost:6060/debug/pprof/.

Основные доступные эндпоинты:

  • /debug/pprof/: Главная страница со списком доступных профилей.
  • /debug/pprof/heap: Профиль кучи.
  • /debug/pprof/goroutine: Профиль активных горутин.
  • /debug/pprof/block: Профиль блокировок.
  • /debug/pprof/threadcreate: Профиль создания потоков ОС.
  • /debug/pprof/cmdline: Командная строка приложения.
  • /debug/pprof/profile: Профиль CPU (по умолчанию собирает данные 30 секунд).
  • /debug/pprof/trace: Профиль трассировки выполнения (по умолчанию собирает данные 1 секунду).

Для анализа профилей CPU, кучи и блокировок обычно используется утилита go tool pprof:

go tool pprof http://localhost:6060/debug/pprof/profile # Профиль CPU за 30 секунд
go tool pprof http://localhost:6060/debug/pprof/heap # Профиль кучи

Для анализа трассировки выполнения используется утилита go tool trace:

go tool trace http://localhost:6060/debug/pprof/trace

Важно: Помните о безопасности и не открывайте порт с pprof наружу без авторизации в продакшене.