Профилирование использования ЦП веб-приложения ASP.NET, но не базы данных! - PullRequest
4 голосов
/ 14 июля 2009

Я наблюдаю стабильно высокую загрузку ЦП для моего веб-приложения ASP.NET (только для живого продукта, естественно ....!), И я пытаюсь сузить причину - в основном это увеличение на четыре Ядро Xeon и нет никакой возможности сделать это!

Загрузка ЦП веб-процесса обычно выше, чем у процесса БД - что само по себе звонит мне в тревогу (?).

Однако использование стандартных инструментов профилирования (dotTrace, Red Gate и т. Д.) Показывает только время, затрачиваемое на отдельные методы (а не фактическое использование ЦП), и, в конечном счете, по-прежнему выделяет методы, связанные с БД. Хотя это может указывать на возможности для кэширования или улучшения индексов, я не вижу, как это само по себе приведет к высокой загрузке ЦП процессом веб-приложения?

Любые предложения или советы о том, как я могу сузить это?

Спасибо!

Ответы [ 4 ]

3 голосов
/ 22 июля 2009

Некоторые предложения, чтобы попробовать в первую очередь.

1. Развертывание с помощью Release Build Проверьте, находится ли развернутый продукт в режиме выпуска. Работая в режиме отладки, тратится много времени на загрузку pdbs вместе со сборками.

2.Disable ViewState Отключите viewstate, если это не требуется. ViewState - это не что иное, как данные, хранящиеся в скрытых полях, которые сохраняются между запросами. это увеличивает общую полезную нагрузку страницы как при обслуживании, так и по запросу. Кроме того, при сериализации или десериализации данных о состоянии просмотра, которые отправляются обратно на сервер, возникают дополнительные издержки. Наконец, состояние просмотра увеличивает выделение памяти на сервере.

3. Отключенное состояние сеанса:

Если вы не собираетесь его использовать, отключите Session State. По умолчанию он включен. Вы можете фактически отключить это для определенных страниц или для всего приложения.

Существует несколько базовых средств мониторинга производительности приложений ASP.NET, ознакомьтесь с этими двумя статьями MSDN. «Мониторинг производительности приложений ASP.NET» и Счетчики производительности для ASP.NET

0 голосов
/ 27 июля 2009

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

Использование веб-приложения выше, чем использование БД, не совсем удивительно. Если у вас приличный дизайн БД, большинство веб-приложений едва ли приведут к потере прилично работающего сервера БД.

0 голосов
/ 27 июля 2009

вы записываете / сообщаете о необработанном исключении? Если этого не сделать, и проверьте, соответствует ли какой-либо из них вашим высоким пикам CPD, у вас может быть переполнение стека, вызывающее пики.

http://msdn.microsoft.com/en-us/library/ms998306.aspx

Вы также можете посмотреть на перекодирование времени каждого запроса, используя HttpModule и проверяя, какие запросы занимают больше всего времени, что может указывать на страницы, которые вызывают проблему.

0 голосов
/ 20 июля 2009

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

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

...