Установка: веб-сайт ASP.NET 4.0 на IIS 6.0 на 64-разрядной версии Win 2003, 8xCPU, 16 ГБ памяти, отдельный сервер БД SQL 2005.
Сегодня произошел серьезный спад с любым другим достаточно хорошо работающим сайтом ASP.NET. В течение пары часов все запросы страниц обрабатывались очень долго - например, 30-60 с по сравнению с обычными 2 с. Использование ЦП и памяти w3wp.exe на веб-сервере было не намного выше обычного. Пул приложений не находился в процессе переработки (и не перерабатывался в течение нескольких часов). Узкие места в базе данных были исключены - блоки не возникали, и результаты запроса возвращались быстро. Я не мог понять это и настроил следующие счетчики Perfmon:
- Текущие анонимные пользователи (для рассматриваемого сайта)
- Получать запросы / сек (так же)
- Запросов / сек для приложения ASP.NET, на котором работает сайт
Получение запросов / сек составляло в среднем 100-150. Число запросов в секунду для ASP.NET составляло в среднем 5-10. Тем не менее, текущим анонимным пользователям было около 200. А потом, пока я смотрел, текущие анонимные пользователи начали круто подниматься, приближаясь к 500 в течение нескольких минут. Все это время запросов Get / sec & Requests / sec для ASP.NET было, если что-нибудь происходит.
Я сделал целую кучу вещей (в панике!), Чтобы попытаться заставить сайт работать, например, закрыть его, переработать пул приложений и добавить еще один рабочий процесс в пул. Я также продлил срок действия контента (в IIS под заголовками HTTP), чтобы уменьшить количество запросов на статические файлы (на сайте много изображений).
Теперь сайт вернулся к нормальному состоянию, и счетчики довольно стабильны и читают (добавлен счетчик текущих подключений):
- Текущие анонимные пользователи: в среднем 30
- Получать запросы / сек: в среднем 100
- Запросов / сек для ASP.NET: 5
- Текущие соединения: в среднем 300
Я также наблюдал обратную связь между запросами Get / сек и текущими анонимными пользователями. Обычно оба довольно устойчивы, но будут короткие периоды, когда число запросов Get / сек резко уменьшится, и текущие анонимные пользователи будут расти в идеальном зеркальном отображении. Затем они вернутся к своим обычным уровням.
Итак, мои вопросы:
Думая о первоначальной проблеме с производительностью - если ЦП w3wp.exe, использование памяти было нормальным и не было узкого места в БД, что могло бы объяснить, что запросы страниц занимали в 20 раз больше времени, чем обычно? На какие еще счетчики мне следует обратить внимание, если это произойдет снова?
Чем объясняется обратная связь между запросами Get / сек и текущими анонимными пользователями?
Что могут объяснить текущие анонимные пользователи от 200 до 500 в течение нескольких минут?
Большое спасибо за понимание этого.