Джанго запрос невероятно медленный, не могу найти почему - PullRequest
2 голосов
/ 28 сентября 2010

У меня есть установка Apache2 + mod_python, которая начала отвечать невозможно медленно с нескольких дней - две секунды процессорного времени на любой запрос моего приложения.Некоторые интересные моменты:

  • Debugbar говорит, что это ~ 15 мс времени запроса.БД не является основным подозреваемымвремя рендеринга шаблона.

Есть идеи, где я могу посмотреть?

Ответы [ 3 ]

1 голос
/ 28 сентября 2010

Предположим, у него был бесконечный цикл.Как бы вы его нашли?

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

Предположим, что цикл не бесконечен, просто занимает много времени.Это сильно отличается?

Неважно, в чем проблема, если это будет стоить вам несколько процентов времени, например, 90%, или 50%, или 20%, это вероятность того, что вы поймете это в действиикогда вы остановитесьТак что, если вы сделаете паузу несколько раз, вы увидите это.Чем хуже, тем меньше раз вам приходится его останавливать и смотреть.Это будет очевидно.

Так что забудьте о времени. Просто выясните, что он делает.


В ответ на вопрос вот какой документ mod_python:

5.4.1 Синтаксис PythonEnablePdb:
PythonEnablePdb {Вкл., Выкл.}
По умолчанию: PythonEnablePdb Выкл.
Контекст: конфигурация сервера, виртуальный хост, каталог, htaccess Переопределение: нет Нет Модуль: mod python.c Если включено, мод python будет выполнять функции-обработчики в пределахОтладчик Python pdb с использованием функции pdb.runcall ().Поскольку pdb - это интерактивный инструмент, при использовании этой директивы запустите httpd из командной строки с параметром -DONE PROCESS.Как только код вашего обработчика введен, вы увидите приглашение Pdb, позволяющее вам пройтись по коду и изучить переменные.

5.4.2 Синтаксис PythonDebug:
PythonDebug {On, Off} По умолчанию: PythonDebugВыкл. Контекст: конфигурация сервера, виртуальный хост, каталог, htaccess. Переопределение: нет. Нет. Модуль: mod python.c Обычно выходные данные обратной трассировки, полученные из-за неперехваченных ошибок Python, отправляются в журнал ошибок.Если указана директива PythonDebug On, выходные данные будут отправляться клиенту (а также журналу), за исключением случаев, когда во время записи возникает ошибка IOError, и в этом случае она попадает в журнал ошибок.Эта директива очень полезна в процессе разработки.Рекомендуется не использовать его в производственной среде, поскольку он может раскрыть клиенту непреднамеренную, возможно, важную информацию о безопасности.

0 голосов
/ 03 сентября 2014

Профилирование приложения - хорошая отправная точка (https://code.djangoproject.com/wiki/ProfilingDjango).

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

В большинстве случаев, вещи были испорчены в представлении, в других случаях это могут быть слои промежуточного программного обеспечения. Следите за тем, какой слой вы профилируете, по функциональности или всем, что связано с запросом / ответом.

Также могут быть полезны другие приемы, такие как сравнение производительности в режиме dev / prod. Попробуйте использовать сервер разработки django, чтобы убедиться, что apache / mod_python не является виновником.

0 голосов
/ 28 сентября 2010

Просто профиль приложения. Полное руководство здесь

...