Джанго проект ест память - PullRequest
3 голосов
/ 14 марта 2011

У меня есть проект django, и проблема - он кушает много памяти и загружает хостинг слишком много.

Как найти проблемные места в проекте, которые потребляют много памяти?

Ответы [ 3 ]

4 голосов
/ 14 марта 2011

Если вы используете Django с DEBUG = True, тогда Django регистрирует каждый запрос к базе данных, который может быстро монтироваться и использовать значительный объем памяти.

Если вы не работаете в режиме отладки, посмотрите на модуль gc и, в частности, попробуйте добавить gc.set_debug(gc.DEBUG_LEAK) к settings.py. Это покажет вам много информации о том, какие объекты используют память.

3 голосов
/ 14 марта 2011

В общем случае для отладки / профилирования я предлагаю django-debug-toolbar в качестве исходного местоположения, а также различные советы:

http://docs.djangoproject.com/en/dev/topics/db/optimization/

Однако это не дастИнформация об использовании памяти.Если вам это действительно нужно, вы можете попробовать какое-то промежуточное программное обеспечение, использующее pympler, для регистрации использования памяти во время отладки и запуска сервера разработки.

http://www.rkblog.rk.edu.pl/w/p/profiling-django-object-size-and-memory-usage-pympler/?c=1

Я обнаружил, что при этом происходит перемалывание моих веб-приложений.почти до полной остановки, а затем возникают проблемы с использованием веб-сервера dev (например, медиафайлы не обслуживаются).

Но, как говорили другие, лучше всего установить DEBUG=False:

http://docs.djangoproject.com/en/dev/faq/models/#why-is-django-leaking-memory

1 голос
/ 14 марта 2011

Как сказал Эндрю Уилкинсон, это может быть связано с настройкой DEBUG = True.Однако также может быть важно знать, запускаете ли вы этот проект отдельно или в качестве веб-сервера.

Django автоматически кэширует наборы запросов при открытии запроса и удаляет ссылки, когда запрос возвращается.Поскольку в автономном проекте нет запросов, ссылки никогда не удаляются, и, следовательно, все запрошенные когда-либо наборы запросов сохраняются.

Чтобы исправить проблему с автономным питоном, просто позвоните django.db.reset_queries() после того, как вы выполниликуча запросов.Это позволит выполнять сборку запросов и устранять утечку.

...