Использование памяти Django, повышающееся с каждым запросом

Я переместил свой первый проект Django от DjangoEurope до Webfaction, и это запустило проблему, бывшую похожую на утечку памяти. С каждым использованием памяти запроса серверного процесса повышается приблизительно на 500 КБ. Это никогда не понижается. Это продолжается, пока Webfaction не уничтожает его для использования слишком большой памяти.

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

Я тестирую память с помощью команды, предложенной Webfaction:

ps -u publica -o rss,etime,pid,command

Больше о моей установке:

  • (Стабильный) Django 1.1
  • Значение по умолчанию установка Webfaction Django с помощью Apache и mod_wsgi
  • DEBUG набор к False
  • MySQLdb 1.2.2 от Webfaction, но после слушания его имел некоторые проблемы, я попробовал версию 1.2.3c. Не помог.

Править: Я создал пустой проект Django - значение по умолчанию конфигурация Django плюс django.contrib.admin и новая пустая база данных (попробованный и с mysql и с postgresql). Я начал перезагружать администратора Django в своем браузере и следил за использованием памяти. Сначала я видел, что проблема произошла - использование памяти выросло после каждой перезагрузки. Но затем это стабилизировало и прекратило расти. Это согласовывается с тем, как мой исходный проект вел себя на Django Europe. К сожалению, на Webfaction это никогда, кажется, не стабилизировалось (или по крайней мере не в определенных рамках памяти, доступной моей учетной записи). Совет?

27
задан Ludwik Trammer 29 May 2012 в 20:58
поделиться

7 ответов

Боюсь, у меня нет однозначных ответов. Советы Грэма Дамплтона были очень полезны, но, к сожалению, он не дал ответа (просто комментировал), поэтому нет возможности принять его ответ.

Хотя я до сих пор не решил проблему полностью, вот несколько основных советов другим людям, имеющим аналогичные проблемы:

14
ответ дан 28 November 2019 в 05:51
поделиться

в первой строке создается выражение, которое отличается от вычисления. Когда вы пытаетесь оценить его, это значит, что он не может найти символ a.

-121--4779928-

Потому что это просто не так работают функции Python; не является особым для лямбд:

>>> def foo(x):
...   return x + a
>>> foo
<function foo at 0xb7dde454>
>>> foo(2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in foo
NameError: global name 'a' is not defined

Переменные подбираются при использовании, а не при определении функции. Они даже просматриваются каждый раз, когда функция вызывается, что вы определенно найдете неожиданным, если вы исходите из C фон (например), но это не проблема в Python.

-121--4779921-

У меня такие же проблемы с веб-действием.

Метод, который я использую, и который веб-функция сказала мне, что я должен продолжать использовать, это запуск cron-задания, которое проверяет память каждые 5 минут или около того, и перезапускает любые приложения, которые выходят из-под контроля.

Из 4 приложений python в веб-действии я в среднем перезапускаю 4 в день.

1
ответ дан 28 November 2019 в 05:51
поделиться

У меня тоже были проблемы с памятью на Webfaction - они появились только после того, как я добавил пятое приложение. Я попробовал несколько изменений в конфигурации apache, но в итоге мне помог переход на mod_wsgi.

0
ответ дан 28 November 2019 в 05:51
поделиться
0
ответ дан 28 November 2019 в 05:51
поделиться

Я бы посоветовал не гадать.

Взгляните на http://code.google.com/p/django-dowser/ , это очень полезное приложение для обнаружения утечек памяти и выяснения, какие части вашего кода ответственны за это. по потреблению памяти.

1
ответ дан 28 November 2019 в 05:51
поделиться

Проверьте, включен ли внутренний кэш-память внутрипроцессного кэша, если да, то это может быть проблемой (новые записи кеша при каждом запросе).

1
ответ дан 28 November 2019 в 05:51
поделиться

Оба модуля mod_python и mod_wsgi загружены в apache?

Я знаю, что mod_wsgi не любит, когда в его сборке есть mod_python. Убедитесь, что он не загружен.

0
ответ дан 28 November 2019 в 05:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: