Как найти memory leak в production?

Middle+
313 просмотров
AFK Offer AI

Сначала подтверди: process_resident_memory_bytes или go_memstats_alloc_bytes постоянно растёт без возврата. Потом: бери heap profile через pprof (go tool pprof http://host/debug/pprof/heap), сравни два снапшота с разницей в час (-base). Смотри inuse_space — что держит память. Типичные причины: растущие map/slice без очистки, горутины-зомби держащие ссылки, глобальный кэш без TTL, незакрытые ресурсы (resp.Body). В Go GC не поможет, если на объекты есть живые ссылки. Diff двух профилей покажет что выросло.

Следующий вопрос

Как работает goroutine scheduling loop?