Как найти узкие места в веб-приложении? - PullRequest
21 голосов
/ 05 февраля 2009

Как мне оценить производительность моих веб-приложений?

Есть ли способ найти узкие места в веб-приложении?

РЕДАКТИРОВАТЬ: я не спрашиваю о каких-либо настройках внешнего интерфейса, таких как изображения, CSS и т. Д. Я хочу знать, как профилировать внутренний интерфейс приложения, чтобы я знал, какие методы / запросы нужно изменить, чтобы повысить производительность .

Ответы [ 11 ]

26 голосов
/ 05 февраля 2009

Что касается узких мест на сервере приложений, вы можете использовать инструмент профилирования , чтобы увидеть, сколько времени затрачивается на каждую часть кода, сколько памяти используется и т. Д. Для PHP webgrind кажется популярным способом профилирования на основе графического интерфейса. Нечто подобное dotTrace будет делать то же самое для приложения ASP.NET. Обратите внимание, что когда дело доходит до баз данных, такие инструменты профилирования показывают только то, какие запросы к базе данных являются медленными, а не , почему они медленные. Для этого вам нужно взглянуть на профилирование базы данных ...

Другим аспектом узких мест веб-приложения является то, сколько времени на самом деле требуется браузеру для загрузки всего (импорт CSS и JavaScript, изображения и т. Д.) И рендеринга страницы. Есть несколько компаний, таких как Keynote , у которых есть боты, которые поразят ваш сайт со всего мира, проанализируют производительность и дадут вам рекомендации по изменениям, которые вы можете внести, чтобы получить выходные данные вашего приложения для браузер и визуализируется как можно быстрее (например, «используйте сжатие gzip и поместите свой JavaScript в конец страницы вместо заголовка» и т. д.). Конечно, вы также можете сделать это в гораздо меньших масштабах. Например, плагины Firefox, такие как Jiffy и YSlow , сделают эту работу.

4 голосов
/ 05 февраля 2009

Для любого веб-приложения вы можете попробовать использовать расширение Firebug вместе с расширением Yahoo YSlow (для Firebug). Действительно полезно в производительности страницы. http://developer.yahoo.com/yslow/

3 голосов
/ 05 февраля 2009

Трассировка - отличное начало

2 голосов
/ 05 февраля 2009

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

Специально для ASP.Net существует механизм трассировки, который может создавать подробный журнал для веб-приложений. Журнал показывает информацию о времени, и вы можете найти долгосрочные функции. (Статья MSDN: Обзор трассировки ASP.NET

1 голос
/ 05 февраля 2009

попробуйте использовать некоторые тестовые механизмы, такие как PHPUnit, чтобы усилить нагрузку на ваше приложение, и используйте оболочку, чтобы увидеть, какой процесс занимает больше времени.

в Unix / Linux вы можете использовать команду 'top'

в Windows используйте диспетчер задач (расширенный)

0 голосов
/ 05 февраля 2009

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

Мне нравится использовать прокси-инструмент HTTP, такой как Charles , чтобы проводить такой анализ.

0 голосов
/ 05 февраля 2009

Включите функцию трассировки trace = true, если это веб-приложение, и вставьте операторы трассировки в начале и в конце ваших методов, которые запускаются. Это даст вам очень подробную информацию о тиках в системе и, следовательно, о том, сколько времени занимает выполнение каждой части.

Если у вас есть библиотека, которая вызывается, вы также можете выполнить трассировку в ней, используя httpcontext.Current.Trace.Write, чтобы вывести то, что вам нужно посмотреть. В качестве альтернативы, если ваше приложение действительно привередливое, вы можете написать свою собственную функцию для хранения операторов трассировки в общей переменной и записать их в БД или другой механизм после запуска сценария.

0 голосов
/ 05 февраля 2009

Первый шаг быстрый и грязный. Попробуйте это на iPhone, ноутбуке с подключением 3G, компьютере с подключением к интернету через спутниковую связь и КПК на базе Windows Mobile. Если это работает, все готово. Если нет, триангулируйте.

0 голосов
/ 05 февраля 2009

Если вы используете Perl, то Devel :: NYTProf - это super amazing .

У меня есть учебник, который я несколько раз читал на OSCON и конференции MySQL по теме " Real World Web: производительность и масштабируемость " (слайды доступны в PDF ) может показаться интересным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...