Что делать, если Python сервер падает из за утечки памяти?

Вопрос: что делать, если Python сервер падает из за утечки памяти

Линия поддержки
Линия поддержки Ответы на вопросы пользователей
16 декабря 2025

Объяснили, как быстро диагностировать утечки памяти в Python и какие временные меры помогут удержать сервер на плаву до исправления кода.

Изображение записи

Комментарий пользователя

Здравствуйте! На проде агент спустя время начинает расти по памяти и в итоге все падает. Где копать и как временно ограничить ущерб, пока ищу утечку?

Лидия Семашко Пользователь

Ответ специалиста

Добрый день, Лидия! Первое, что нужно сделать — измерить и локализовать. tracemalloc показывает, какие строки выделяют больше всего памяти, gc — количество объектов. 

Часто проблема в неограниченных кэшах, списках или в C-расширениях. Сначала включите tracemalloc, дайте процессу поработать и снимите snapshot:

  • Антон Земцов

    Антон Земцов

    Младший бэкенд-разработчик Python


      import tracemalloc
tracemalloc.start()
# после нагрузки
snapshot = tracemalloc.take_snapshot()
top = snapshot.statistics('lineno')[:10]
for stat in top:
    print(stat)

Параллельно делайте gc.collect() и логируйте число объектов len(gc.get_objects()), чтобы увидеть рост. На время расследования применяйте эксплуатационные меры: для WSGI-сервисов используйте Gunicorn с --max-requests и --max-requests-jitter, чтобы процессы периодически перезапускались и не накапливали мусор. А в контейнерах ставьте cgroup-пределы (--memory) и настраивайте restart-политику, чтобы платформа автоматически перезапускала упавшие поды.

Пример запуска Gunicorn:


      gunicorn myapp:app --workers 4 --max-requests 1000 --max-requests-jitter 50

Если утечка в C-расширении или сторонней библиотеке — временно автоматический перезапуск и мониторинг позволяют сохранить сервис работоспособным, пока вы находите корень проблемы и исправляете код.

Чтобы освоить больше инструментов для решения сложных инфраструктурных задач, следите за нашими материалами в Академии Selectel.