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

В настоящее время у меня есть сайт django, и он довольно медленный, поэтому я хочу понять, что происходит. Как я могу профилировать его, чтобы различать:

  • влияние сети
  • влияние хостинга, который я использую
  • эффект от javascript
  • влияние выполнения на стороне сервера (код python) и доступа к sql.
  • любой другой эффект я не рассматриваю из-за сильной головной боли, которая у меня сегодня вечером.

Конечно, для некоторых из них я могу использовать firebug, но некоторые эффекты связаны (например, javascript может казаться медленным, потому что он делает медленный доступ к сети)

Спасибо


person Stefano Borini    schedule 07.11.2009    source источник


Ответы (4)


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

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

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

  • проверьте веб-сервер с небольшим статическим содержимым (маленький gif или небольшая html-страница), используя apache Bench (ab, часть пакета apache webserver) или http://www.hpl.hp.com/research/linux/httperf/, сервер должен быть в состоянии отвечать как минимум на 100 запросов в секунду (конечно, это сильно зависит от размера вашего теста контент, тип веб-сервера, аппаратное обеспечение и другие вещи, так что не принимайте эти 100 всерьез). если это выглядит хорошо,

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

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

    • check i/o throughput with iostat. if you see lot's of writes then you have get a better disc subsystem, faster raid, SSD hard drives .. or optimize your application to write less.
    • если у него много чтений, хосту может не хватить оперативной памяти, выделенной в качестве буфера файловой системы, или ваши запросы к базе данных могут быть не оптимизированы.
    • если ввод-вывод выглядит нормально, возможно, база данных не подходит для вашей рабочей нагрузки или неправильно настроена. регистрация медленных запросов и мониторинг активности базы данных, блокировок и т. д. может дать вам некоторое представление

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

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

person pfote    schedule 07.11.2009

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

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

person Dominic Rodger    schedule 07.11.2009
comment
конечно, вы должны выполнять такое профилирование на действующем веб-сайте, потому что обычно там находятся реальные данные, но я также думаю, что это не особенно безопасно... каково стандартное решение? попасть на сайт с поддельными запросами (помню, для этого есть утилита)? - person Stefano Borini; 07.11.2009
comment
Вам не нужно делать django-debug-toolbar на рабочем веб-сайте, хотя вы можете запустить yslow на своем живом сайте. Я использую django-debug-toolbar с сервером разработки. Не используйте его для абсолютных чисел (x занимает y секунды), а для относительного времени запросов и т. д. Это особенно полезно для определения того, выдает ли конкретное представление больше запросов к базе данных, чем нужно. - person Dominic Rodger; 07.11.2009

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

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

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

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

Вот пример.

person Mike Dunlavey    schedule 07.11.2009

Перво-наперво; убедитесь, что вы знаете, какие страницы работают медленно. Вы можете быть удивлены. Я рекомендую django_dumpslow.

person Chase Seibert    schedule 10.11.2009