Профилирование процессора через pprof: как найти горячий путь
Профиль процессора отвечает на вопрос «где программа проводит время». Собирается он выборкой: рантайм примерно сто раз в секунду прерывает выполнение и записывает стеки всех работающих горутин — поэтому профиль показывает не точное время, а распределение. Взять его можно двумя способами: go test -cpuprofile для бенчмарка и эндпоинт /debug/pprof/profile для работающего сервиса. Дальше работает go tool pprof, и в нём стоит знать три команды: top показывает функции по собственному времени, list Функция — построчную разбивку внутри неё, web или веб-интерфейс — граф вызовов. Ключевое различие, которое путают: flat — время в самой функции, cum — включая вызванные ею; оптимизировать имеет смысл то, у чего велик flat. Практическое правило: профиль снимают под реальной нагрузкой и достаточно долго (десятки секунд), иначе выборка не наберёт статистики, а в топе окажется случайная функция.