Ответ
Профилирование — это процесс сбора и анализа данных о производительности программы для выявления «узких мест» (bottlenecks).
В Go стандартный пакет pprof
позволяет собирать следующую информацию:
CPU Profiling (Профилирование ЦП)
- Показывает, какие функции потребляют больше всего процессорного времени. Помогает найти и оптимизировать вычислительно-затратные участки кода.
Memory Profiling (Профилирование памяти, Heap)
- Показывает, какие функции выделяют больше всего памяти. Помогает обнаружить утечки памяти и неэффективное использование ресурсов.
Block Profiling (Профилирование блокировок)
- Сообщает, в каких местах горутины блокируются дольше всего в ожидании ресурсов (например, при операциях с каналами или мьютексами).
Mutex Profiling (Профилирование мьютексов)
- Помогает выявить мьютексы с высокой степенью конкуренции (contention), то есть те, за которые горутины борются чаще всего.
Профилировщик можно подключить как HTTP-обработчик для анализа работающего приложения:
import (
"log"
"net/http"
_ "net/http/pprof" // Важно: импортируем для регистрации обработчиков
)
func main() {
// ... ваш основной код
// Запускаем pprof сервер на порту 6060
go func() {
log.Println(http.ListenAndServe("localhost:6060", nil))
}()
// ...
}
После запуска можно анализировать данные с помощью утилиты go tool pprof
, например, для анализа использования памяти:
go tool pprof http://localhost:6060/debug/pprof/heap