Как искать утечку памяти в production-сервисе, если локально не воспроизводится?

Для поиска утечки памяти в production-сервисе, когда локально её воспроизвести не удаётся, можно использовать следующие подходы:

Короткий ответ

Что ответить на собеседовании

Для поиска утечки памяти в production-сервисе, когда локально её воспроизвести не удаётся, можно использовать следующие подходы:

Подробный разбор

Ответ с пояснениями

Для поиска утечки памяти в production-сервисе, когда локально её воспроизвести не удаётся, можно использовать следующие подходы:

  1. Сбор профилей памяти (heap dumps) в проде. В Go можно использовать пакет runtime/pprof или инструменты, встроенные в сервис (например, HTTP endpoint для профилей). Снимите heap-профиль в момент подозрения на утечку.
  2. Анализ профилей с помощью pprof. Полученный профиль можно загрузить в go tool pprof и проанализировать, какие объекты занимают память и не освобождаются.
  3. Мониторинг метрик памяти. Используйте Prometheus или другие системы мониторинга для отслеживания роста потребления памяти, GC pause time, количества горутин.
  4. Логирование и трассировка. Добавьте логирование создания и удаления ключевых объектов, чтобы понять, где объекты не освобождаются.
  5. Использование инструментов динамического анализа. Например, delve для отладки, или сторонние APM-системы с поддержкой Go.
  6. Репликация условий продакшена. Попробуйте воспроизвести нагрузку и окружение, максимально приближенное к продакшену, чтобы локально поймать утечку.

Пример команды для снятия heap-профиля в проде:

import (
	"net/http"
	_ "net/http/pprof"
)

func main() {
	go func() {
		http.ListenAndServe(":6060", nil) // pprof доступен по http://localhost:6060/debug/pprof/
	}()
	// остальной код
}

Затем в проде можно получить профиль:

curl http://localhost:6060/debug/pprof/heap > heap.prof

И проанализировать локально:

go tool pprof heap.prof
(pprof) top

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку