Назад к вопросам
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 наружу без авторизации в продакшене.