Ответ
pprof — это стандартный инструмент для визуализации и анализа данных профилирования в Go. Он помогает находить узкие места в производительности приложения, утечки памяти и проблемы с конкурентностью.
Основные задачи, которые решает pprof:
- Профилирование CPU: Определяет, какие функции потребляют больше всего процессорного времени. Помогает найти "горячие точки" (hot spots) в коде для оптимизации.
- Профилирование памяти (
heap): Показывает, какие участки кода выделяют больше всего памяти. Помогает обнаружить утечки памяти и неэффективные аллокации. - Анализ блокировок (
mutex) и горутин (goroutine): Показывает стектрейсы всех текущих горутин и выявляет места, где горутины заблокированы в ожидании мьютексов, что помогает диагностировать проблемы с конкурентностью (contention).
Как использовать:
Самый простой способ — встроить pprof в веб-сервер вашего приложения.
-
Интеграция: Добавьте анонимный импорт пакета
net/http/pprof.import ( "log" "net/http" _ "net/http/pprof" // Анонимный импорт регистрирует обработчики pprof ) func main() { // Запускаем pprof сервер в отдельной горутине go func() { log.Println(http.ListenAndServe("localhost:6060", nil)) }() // ... ваш основной код приложения ... } -
Анализ:
- Через браузер: После запуска приложения откройте
http://localhost:6060/debug/pprof/. Вы увидите ссылки на различные профили (goroutine,heap,mutex,profileдля CPU и др.). -
Через командную строку: Используйте утилиту
go tool pprofдля интерактивного анализа. Например, чтобы собрать профиль CPU за 30 секунд и проанализировать его:# Собираем данные go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30 # После сбора данных откроется интерактивная консоль pprof. # Популярные команды: top, list <имя_функции>, web (генерирует граф вызовов)
- Через браузер: После запуска приложения откройте