Недавно мы развернули новую версию нашего веб-приложения для производства с некоторыми существенными изменениями на относительно более высокой странице трафика, которая загружает различные ипотечные продукты , С момента развертывания эта страница продуктов увеличилась с 7 до 10 секунд в любом месте от 50 секунд до 2 минут для загрузки. Кроме того, теперь использование центрального процессора часто увеличивается из-за нашего рабочего процесса IIS (w3wp.exe 32), работающего на нашем выделенном веб-сервере производства. Эта неприемлемо резкая потеря производительности происходит только на странице продукта, а не на других страницах.ASP.Net IIS Worker Process (w3wp.exe * 32) с использованием 100 ресурсов ЦП в производственной среде
Я запустил DebugDiag.exe на сервере в течение продолжительной продолжительности максимального использования CPU. Преступник снова стал страницей нашего продукта. У нас в среднем 60 пользователей в обычное рабочее время и во время пиков максимальный процессор значительно замедляет загрузку остальных страниц веб-приложения. Мы получаем случайный код ошибки 501 http, который указывает на перегрузку сервера ошибок &.
Я запустил Chrome Dev Tools> Network> Capture и увидел, что (например) один запрос для получения самой самой страницы продуктов (248k) занимает 24 секунды, затем несколько последующих запросов для пары 20kb изображений и файлов JavaScript (от 24 до 50 секунд каждый) для общего времени загрузки страницы в 1,9 минуты (перенос 850 тыс., общее количество запросов - DOMContentLoaded = 1,2 минуты).
Я не думаю, что снижение производительности это существенное из-за неэффективных изменений в коде asp.net или SQL, присущих этой новой версии (не стоит беспокоиться о том, что я пытаюсь покрыть себя, это не мой код; -)). В поисках этой теории я заметил, что после того, как основная часть содержимого страницы продукта загрузится в браузере, Chrome затем выдаст другой запрос на получение (http://ourcompany.com/ productpage.aspx? ImageControl_ctl00 $ ctl00 $ cphMainBodyFrame $ ImageCompanyLogo = 1) для компании 12k логотип, который размещен на главной странице asp.net ImageControl. Этот запрос займет в среднем еще 40 секунд. Таким образом, логотип не появлялся до поздней игры.
Я запустил средство профилирования SimpleTrace asp.net от Telerik в локальной локальной среде DEV на странице продукта, которая, несмотря на многочисленные обращения к базам данных и уровням доступа к данным, не показала ничего очевидного с точки зрения узких мест производительности. Затем я вставил вышеуказанный логотип в адрес при профилировании в JustTrace и увидел, что для получения этого логотипа выполняется минимальная обработка. Asp.net внутренне вызывает только две хранимые процедуры в базе данных членства для аутентификации пользователя вместе с некоторыми другими незначительными системными вызовами. Несмотря на минимальный asp.net и сохраненный proc. звонки, запрос на логотип занимает слишком много времени; и только для страницы продукта.
Может ли это быть проблемой блокировки сеанса? Кроме того, я читал тысячи сообщений SO за эти годы, и это мой первый пост. Благодарим SO сообщество за вашу поддержку на протяжении многих лет. Это бесценный ресурс.
Win Server 2008 R2 (V6.1 сборки 7601: SP1) - [ВМ с 8 ядрами CPU> 32GB RAM] IIS (7.5.7600.16385) ASP.NET 4.0 WebForms MSSQL Server 12
Когда ваш сервер полностью использует процессор для обработки страницы productpage.aspx, очевидно, что любой другой запрос на тот же сервер также пострадает. Поэтому я хотел бы вернуться на первый план и проанализировать наиболее очевидный подозреваемый: единственное, что изменилось между сайтом относительно быстро и неработоспособно медленнее: страница продуктов. – CodeCaster
Другие разработчики перерабатывали страницу продукта. Тем не менее, другие страницы приложения, отправляющие свои запросы одновременно с страницей «Продукты», выполняются быстро, если процессор не будет увеличен дольше. Также озадачивает (как в OP) только запрос логотипа (только на странице продукта), например. (... productpage.aspx? ImageControl_ctl00 $ ctl00 $ cphMainBodyFrame $ ImageCompanyLogo = 1) сам, вставив выше ссылку в адресную строку, занимает в среднем 45 секунд. Только внутренний asp.net вызывает пожар во время этого запроса, включая, я думаю, блокировку сеанса asp.net. Запросы для файлов 20k .js также сканируются – Perdiddy