Как найти, что тормозит или ест память в Go-сервисе, — pprof?
- Как профилировать Go-приложение?
- Как найти утечку памяти в Go?
pprof — встроенный профилировщик. В сервис подключают import _ "net/http/pprof" (на внутреннем порту), затем go tool pprof http://host:6060/debug/pprof/profile?seconds=30 — профиль CPU, /heap — память (живые объекты и аллокации), /goroutine — стеки всех горутин (видно утечки горутин), /mutex и /block — ожидание блокировок. Анализ: top, list функция, flame graph в веб-интерфейсе (-http=:8080). Для кода — бенчмарки с -benchmem и -cpuprofile.
- Растущее число горутин в /goroutine — классический признак утечки
- alloc_space показывает, кто много аллоцирует (нагрузка на GC), inuse_space — кто держит память
- Эндпоинт pprof нельзя открывать наружу
А ещё Сравнение двух профилей (-base) показывает, что выросло после изменения
Подробно
Шаги разбора памяти:
- Снять heap-профиль, через час — ещё один.
go tool pprof -base heap1 heap2— что выросло.listпо функции — какие строки аллоцируют.
Бенчмарк:
go test -bench=Parse -benchmem -cpuprofile cpu.out
go tool pprof -http=:8080 cpu.out
Трассировка: go tool trace показывает работу планировщика, паузы GC и блокировки во времени.
Что хотят услышать
- net/http/pprof и виды профилей.
- Анализ: top, list, flame graph.
- Поиск утечек горутин и памяти.
- Бенчмарки с -benchmem.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Профилировать Go-код можно только сторонними платными инструментами
- ✓Встроенный pprof: профили CPU, heap и goroutine
- ✗Эндпоинт pprof стоит открыть в интернет, чтобы снимать профили с любой машины
- ✗Профиль /goroutine бесполезен для поиска утечек горутин
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.