как выполнить профилирование для веб-сайта?

Я бы, вероятно, пропустил кеширование - Lucene очень и очень эффективен. Возможно, так эффективно, что поиск будет быстрее, чем в кеше.

Мне кажется, что полный индекс OnApplication_Start мне не подходит - его, вероятно, следует запускать в своем собственном потоке, чтобы не блокировать другие дорогостоящие действия при запуске.

6
задан Stefano Borini 7 November 2009 в 14:13
поделиться

4 ответа

на стороне клиента:

  • проверить с помощью firebug, если / какие компоненты страницы загружаются долго, и сколько времени нужно браузеру для отображения страницы после завершения загрузки. Если все происходит быстро, но рендеринг требует времени, возможно, проблема в вашем html / css / js, в противном случае - на стороне сервера.

на стороне сервера (я предполагаю, что вы сидите на каком-то unix-подобном сервере):

  • проверьте веб-сервер с небольшим статическим содержимым (небольшой gif или небольшая страница html), используя apache bench (ab, часть apache webserver package) или httperf , сервер должен иметь возможность отвечать как минимум на 100 запросов в секунду (конечно, это сильно зависит от размера вашего тестового контента, типа веб-сервера, оборудования и других вещей, так что не воспринимайте это 100 серьезно). если все выглядит хорошо,

  • протестируйте django с помощью ab или httperf в «статическом представлении» (в котором не используется объект базы данных), если это медленно, значит, вы нужно больше мощности процессора. проверьте загрузку процессора на сервере с помощью top . Если все в порядке, проблема может быть в том, как веб-сервер выполняет код Python

  • . Если обслуживание полустатического контента в порядке, ваша проблема может быть связана с базой данных или с привязкой к вводу-выводу. Проблемы с базами данных - обширная область, вот несколько общих советов:

    • проверьте пропускную способность ввода-вывода с помощью iostat . если вы видите много операций записи, значит, вы получаете лучшую дисковую подсистему, более быстрый рейд, жесткие диски SSD ... или оптимизируете свое приложение, чтобы писать меньше.
    • если у него много операций чтения, хосту может не хватить оперативной памяти, выделенной в качестве буфера файловой системы, или ваши запросы к базе данных могут не быть оптимизированы
    • . Если ввод-вывод выглядит нормально, то база данных может не подходить для вашей рабочей нагрузки или неправильно настроена. регистрация медленных запросов и мониторинг активности базы данных, блокировок и т. д. могут дать вам некоторое представление

, если вы сообщите нам, какое оборудование / программное обеспечение вы используете, я мог бы дать более подробный совет

edit / PS: забыл одну вещь: of конечно, ваше приложение может иметь плохой дизайн и делать много ненужных / неэффективных вещей ...

5
ответ дан 10 December 2019 в 02:49
поделиться

Взгляните на панель инструментов отладки Django - она ​​поможет вам с кодом на стороне сервера (например, какие запросы к базе данных выполнялись и сколько времени они занимали); и, как правило, это отличный ресурс для разработки Django.

Другие части, не относящиеся к Django, вы можете профилировать с помощью yslow .

3
ответ дан 10 December 2019 в 02:49
поделиться

Существуют различные инструменты, но такие проблемы нетрудно найти, потому что они большие.

У вас есть проблема, и когда вы удалите ее, вы ощутите ускорение. Предположим, что ускорение - это какой-то фактор, например, 2x. Это означает, что программа тратит 50% своего времени на ожидание медленной части. Я просто останавливаю его несколько раз и смотрю, чего он ждет. В этом случае я бы видел проблему в 50% случаев, когда останавливал ее.

Сначала я бы сделал это на стороне клиента. Если я вижу, что 50% израсходовано на ожидание сервера, я бы попытался остановить его на стороне сервера. Затем, если я увижу, что он ждет запросов SQL, я мог бы посмотреть на них.

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

Вот пример.

1
ответ дан 10 December 2019 в 02:49
поделиться

First things first; make sure you know which pages are slow. You might be surprised. I recommend django_dumpslow.

0
ответ дан 10 December 2019 в 02:49
поделиться
Другие вопросы по тегам:

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