> Как запустить профилировщик в Go (Go)
Уровень: senior · Роль: backend · Категория: Технические вопросы
Компании: Wildberries
Стек: Go
> Пример ответа
В Go профилировщик запускается через пакет runtime/pprof для CPU и памяти, или через net/http/pprof для HTTP-серверов.
1. CPU-профилирование
Используйте pprof.StartCPUProfile() и pprof.StopCPUProfile():
GOimport "runtime/pprof"f, _ := os.Create("cpu.prof")pprof.StartCPUProfile(f)defer pprof.StopCPUProfile()// ваш код
Затем анализируйте: go tool pprof cpu.prof.
2. Профилирование памяти
Запишите снимок:
GOf, _ := os.Create("mem.prof")pprof.WriteHeapProfile(f)f.Close()
Или используйте runtime.GC() перед записью для точности.
3. Через HTTP (удобно для веб-сервисов)
Импортируйте net/http/pprof:
GOimport _ "net/http/pprof"// запустите HTTP-серверhttp.ListenAndServe(":6060", nil)
Теперь доступны эндпоинты: /debug/pprof/, /debug/pprof/profile (CPU), /debug/pprof/heap (память).
Пример сбора CPU через curl:
curl -o cpu.prof http://localhost:6060/debug/pprof/profile?seconds=30
4. Интерактивный анализ
После получения профиля:
go tool pprof -http=:8080 cpu.prof - откроет веб-интерфейс с графами и flame graph.
Совет: Для продакшена используйте runtime.SetBlockProfileRate и runtime.SetMutexProfileFraction для блокировок и мьютексов, а также pprof.Lookup("goroutine") для горутин.
> Похожие задачи по backend
Сколько потоков запускается в runtime приложении Go по умолчанию
Какая команда помогает понять, что происходит при запросе к базе данных для поиска узких мест по производительности
Что лучше использовать в Go: int8, int32, int64 или просто int
Писали ли интеграционные тесты или моки для сервисов с Dependency Injection
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью