Профилирование с помощью Go pprof
В RUSEON Core встроен стандартный профилировщик среды выполнения Go (net/http/pprof), доступный на порту сервера метрик (по умолчанию: :9090). Профилирование позволяет диагностировать узкие места CPU, утечки памяти, зависшие горутины и конкуренцию за блокировки прямо на работающем сервере без остановки сервиса.
1. Каталог эндпоинтов профилирования
| Эндпоинт | Собираемые данные | Назначение диагностики |
|---|---|---|
/debug/pprof/profile?seconds=30 | Профиль сэмплирования CPU | Поиск "горячих" функций и узких мест трансмуксинга |
/debug/pprof/heap | Снимок памяти в куче | Поиск утечек памяти и неконтролируемых аллокаций |
/debug/pprof/goroutine | Стеки активных горутин | Обнаружение зависших горутин и дедлоков |
/debug/pprof/mutex | События конкуренции блокировок | Измерение времени ожидания на sync.RWMutex |
/debug/pprof/allocs | Накопленные аллокации | Оценка нагрузки на сборщик мусора (GC) |
2. Снятие и анализ профилей
Запись 30-секундного профиля CPU
bash
# Запись 30 секунд профиля CPU с работающего сервера
go tool pprof http://localhost:9090/debug/pprof/profile?seconds=30В интерактивной консоли pprof:
text
(pprof) top20
(pprof) list RingBuffer.WriteFrameВеб-интерфейс и Flamegraph (Флеймграфы)
Запуск интерактивного браузерного дашборда с интерактивным флеймграфом:
bash
go tool pprof -http=:8081 http://localhost:9090/debug/pprof/profile?seconds=30Анализ профиля кучи (Heap) и горутин
bash
# Сохранение снимка кучи в локальный файл
curl -s http://localhost:9090/debug/pprof/heap > heap.pprof
# Анализ снимка в браузере
go tool pprof -http=:8081 heap.pprof
# Просмотр списка всех горутин в текстовом виде
curl -s http://localhost:9090/debug/pprof/goroutine?debug=1Непрерывное профилирование (Pyroscope / Parca)
Стандартные pprof-эндпоинты RUSEON Core напрямую интегрируются с агентами непрерывного профилирования (Continuous Profiling), такими как Grafana Pyroscope:
yaml
# Пример конфигурации сбора для Pyroscope
scrape_configs:
- job_name: "ruseon-profiling"
static_configs:
- targets: ["ruseon.internal:9090"]