Начните с нового кеша: рост числа ключей, отсутствие eviction/TTL и удержание больших ответов могут выглядеть как утечка, хотя объекты остаются достижимыми. GC такие объекты освобождать не должен.
Проблема с ростом потребления памяти в Python‑сервисе после обновления
Начните с нового кеша: рост числа ключей, отсутствие eviction/TTL и удержание больших ответов могут выглядеть как утечка, хотя объекты остаются достижимыми. GC такие объекты освобождать не должен.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Основной Python‑сервис постепенно увеличивает объём используемой памяти, в итоге полностью исчерпывая ресурсы сервера примерно за 48 часов. Автоматический сборщик мусора не справляется с этой ситуацией. Наблюдается, что проблема возникла после последнего релиза, где была добавлена собственная библиотека для кеширования запросов к внешнему API.
Необходимо описать последовательность действий, которые следует выполнить для обнаружения причины утечки памяти и её устранения.
Ответ
Начните с нового кеша: рост числа ключей, отсутствие eviction/TTL и удержание больших ответов могут выглядеть как утечка, хотя объекты остаются достижимыми. GC такие объекты освобождать не должен.
Сопоставьте рост RSS с размером кеша, числом запросов и уникальных ключей. Воспроизведите на ограниченной нагрузке, сравните снимки tracemalloc, проверьте цепочки ссылок и фоновые задачи. Если RSS растёт без роста Python-объектов, исследуйте native-буферы и аллокатор.
Для смягчения отключите новый кеш или откатите релиз, затем задайте ограничение размера/веса и корректное вытеснение. TTL без фактической очистки может не решить проблему. Избегайте кеширования response/socket и чрезмерно вариативных ключей. Подтвердите исправление длительным прогоном и стабилизацией метрик, а не разовым gc.collect().