> Как обнаружить, что процесс начал занимать больше времени (Go)
Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы
Компании: Wildberries
Стек: Go
> Пример ответа
Для обнаружения увеличения времени выполнения процесса в Go можно использовать несколько подходов.
1. Метрики и профилирование
Встроенный пакет net/http/pprof позволяет собирать профили CPU и трассировки. Добавьте эндпоинт /debug/pprof/ и регулярно снимайте профили. Сравнивайте время выполнения ключевых функций через go tool pprof -top. Например, если время в processRequest выросло с 50ms до 200ms - это сигнал.
2. Мониторинг с помощью Prometheus и гистограмм
Используйте prometheus/client_golang для создания гистограммы времени выполнения:
GOvar requestDuration = prometheus.NewHistogramVec(prometheus.HistogramOpts{Name: "process_duration_seconds",Help: "Duration of process execution",Buckets: prometheus.DefBuckets,},[]string{"status"},)
Измеряйте время с помощью time.Since() и наблюдайте за квантилями (p99, p50) в Grafana. Резкий рост p99 указывает на проблему.
3. Логирование с задержками
Добавьте логирование с пороговыми значениями:
GOstart := time.Now()defer func() {if dur := time.Since(start); dur > 100*time.Millisecond {log.Printf("SLOW: process took %v", dur)}}()
4. Трейсинг (OpenTelemetry)
Внедрите распределённую трассировку. Создайте спаны для ключевых операций и экспортируйте их в Jaeger или Zipkin. Увеличение времени в конкретном спане укажет на узкое место.
5. Системные утилиты
Используйте strace (Linux) для отслеживания системных вызовов или perf для анализа CPU. Например, strace -p <PID> -T покажет время каждого вызова.
Комбинируйте эти методы: настройте алерты в Prometheus на основе гистограмм, а при срабатывании анализируйте профили и трейсы.
> Похожие задачи по Go
Что такое грязное чтение, фантомное чтение и неповторяемое чтение в транзакциях
Как принимается решение, кому звонить при проблемах в нерабочее время
Какие методы использовались для достижения оптимизации процесса закрытия операционного дня
Какие задачи решает бэк офис для банков
> Похожие задачи по backend
Что такое грязное чтение, фантомное чтение и неповторяемое чтение в транзакциях
Как принимается решение, кому звонить при проблемах в нерабочее время
Какие методы использовались для достижения оптимизации процесса закрытия операционного дня
Какие задачи решает бэк офис для банков
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью