Проблема с ростом потребления памяти в Python‑сервисе после обновления

Начните с нового кеша: рост числа ключей, отсутствие eviction/TTL и удержание больших ответов могут выглядеть как утечка, хотя объекты остаются достижимыми. GC такие объекты освобождать не должен.

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

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

Начните с нового кеша: рост числа ключей, отсутствие eviction/TTL и удержание больших ответов могут выглядеть как утечка, хотя объекты остаются достижимыми. GC такие объекты освобождать не должен.

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

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

Условие

Основной Python‑сервис постепенно увеличивает объём используемой памяти, в итоге полностью исчерпывая ресурсы сервера примерно за 48 часов. Автоматический сборщик мусора не справляется с этой ситуацией. Наблюдается, что проблема возникла после последнего релиза, где была добавлена собственная библиотека для кеширования запросов к внешнему API.

Необходимо описать последовательность действий, которые следует выполнить для обнаружения причины утечки памяти и её устранения.

Ответ

Начните с нового кеша: рост числа ключей, отсутствие eviction/TTL и удержание больших ответов могут выглядеть как утечка, хотя объекты остаются достижимыми. GC такие объекты освобождать не должен.

Сопоставьте рост RSS с размером кеша, числом запросов и уникальных ключей. Воспроизведите на ограниченной нагрузке, сравните снимки tracemalloc, проверьте цепочки ссылок и фоновые задачи. Если RSS растёт без роста Python-объектов, исследуйте native-буферы и аллокатор.

Для смягчения отключите новый кеш или откатите релиз, затем задайте ограничение размера/веса и корректное вытеснение. TTL без фактической очистки может не решить проблему. Избегайте кеширования response/socket и чрезмерно вариативных ключей. Подтвердите исправление длительным прогоном и стабилизацией метрик, а не разовым gc.collect().

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее