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