Профилирование загрузки процессора ASP.NET веб-приложения - но не базы данных!

StackOverflow https://stackoverflow.com/questions/1126434

Вопрос

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

Загрузка процессора веб-процесса, как правило, выше, чем у процесса базы данных, что само по себе вызывает у меня тревогу (?).

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

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

Спасибо!

Это было полезно?

Решение

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

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

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

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

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

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

Другие советы

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top