Ответ
pprof — это стандартный пакет и инструмент в Go для визуализации и анализа данных профилирования. Он незаменим для поиска узких мест в производительности (bottlenecks) и утечек памяти.
Основные виды профилей:
- CPU Profile (
/debug/pprof/profile
): Показывает, какие функции потребляют больше всего процессорного времени. Помогает оптимизировать ресурсоёмкие операции. - Memory Profile (Heap) (
/debug/pprof/heap
): Отображает распределение объектов в куче. Используется для поиска утечек памяти и оптимизации её использования. - Goroutine Profile (
/debug/pprof/goroutine
): Показывает стектрейсы всех активных горутин. Помогает в отладке дедлоков или обнаружении "зависших" горутин. - Block Profile (
/debug/pprof/block
): Сообщает, где горутины тратят время на ожидание синхронизации (например, на мьютексах или каналах).
Как подключить и использовать:
-
Импортируйте пакет
net/http/pprof
. Он автоматически регистрирует свои обработчики вDefaultServeMux
.import ( "log" "net/http" _ "net/http/pprof" // Важно: анонимный импорт ) func main() { go func() { // Запускаем HTTP-сервер для pprof на отдельном порту log.Println(http.ListenAndServe("localhost:6060", nil)) }() // ... ваш основной код приложения ... }
-
Запустите анализ с помощью консольной утилиты
go tool pprof
. Для анализа можно запустить интерактивную консоль или сразу веб-интерфейс.# Анализ использования памяти (heap) go tool pprof http://localhost:6060/debug/pprof/heap # Анализ CPU в течение 30 секунд и запуск веб-интерфейса go tool pprof -http=:8081 http://localhost:6060/debug/pprof/profile?seconds=30
После выполнения последней команды в браузере откроется UI, где можно наглядно увидеть граф вызовов (flame graph) и другие метрики.