pprof профилирование
Тема дорожной карты · Golang
pprof — встроенный фреймворк профилирования Go, включающий пакет runtime/pprof для программного сбора профилей и пакет net/http/pprof, публикующий живой HTTP-эндпоинт профилирования на /debug/pprof/ при импортировании как blank import в Golang-сервисе. Команда go tool pprof читает CPU-профили (go test -cpuprofile=cpu.out), heap-профили (-memprofile=mem.out), дампы goroutines и профили конкуренции мьютексов, представляя их в виде интерактивных flamegraph, списков топ-N функций или аннотированных исходным кодом графов вызовов. CPU pprof-профилирование выявляет горячие функции, потребляющие наибольшее процессорное время, тогда как heap-профилирование указывает на интенсивные по выделениям пути кода, где замена конкатенации []byte на strings.Builder или добавление повторного использования sync.Pool может значительно улучшить производительность Go. Включение эндпоинта /debug/pprof/ в staging Golang-сервисах, развёрнутых в Kubernetes, позволяет профилировать живой трафик по требованию через go tool pprof http://pod-ip:6060/debug/pprof/profile?seconds=30. pprof-профилирование — авторитетная отправная точка для любой работы по оптимизации производительности Go: никогда не оптимизируйте Golang-код без профиля, показывающего, где реально тратятся время или память.
Как это работает
pprof профилирование использует pprof (CPU, memory, goroutine, block, mutex-профили), бенчмарки (go test -bench=.), trace-инструмент (go test -trace=trace.out + go tool trace), execution tracer для scheduling goroutines. -race-детектор для race conditions. Обычные победы: меньше аллокаций (sync.Pool, []byte slices, value-типы), избегать reflection в горячих путях, strings.Builder для конкатенации, профайл до оптимизации.
Когда применять
Всегда профайл до оптимизации — Go's pprof встроен и дружелюбен. pprof.StartCPUProfile в production за net/http/pprof (admin-эндпойнт, IP-restricted). Меньше аллокаций — обычно главная победа; вывод escape analysis (go build -gcflags="-m") показывает, что аллоцирует на heap vs stack.
Типичные ошибки
Ловушки pprof профилирование: микрооптимизация без замеров (Go-компилятор умный, преждевременная оптимизация часто вредит); sync.Pool для объектов, создаваемых раз на запрос (overhead pool > выгоды на низких rate); тюнинг GOGC по интуиции, не по бенчмарку (дефолт 100 обычно ок).