Назад | Перейти на главную страницу

Инцидент с производительностью IIS / ASP.NET - текущие анонимные пользователи Perfmon проходят через крышу, но запросов в секунду мало

Настройка: веб-сайт ASP.NET 4.0 на IIS 6.0 на Win 2003, 64-разрядная версия, 8xCPU, 16 ГБ памяти, отдельный сервер базы данных SQL 2005.

Сегодня произошло серьезное замедление работы любого, в остальном, достаточно хорошо работающего сайта ASP.NET. В течение нескольких часов все запросы страниц обрабатывались очень долго - например, 30-60 секунд по сравнению с обычными 2 секундами. Использование ЦП и памяти w3wp.exe на веб-сервере было ненамного выше, чем обычно. Пул приложений не перерабатывался (и не перерабатывался несколько часов). Были исключены узкие места в базе данных - блоки не возникали, а результаты запросов возвращались быстро. Я не мог понять этого и настроил следующие счетчики Perfmon:

Получить запросов / сек было в среднем 100-150. Запросы в секунду для ASP.NET в среднем составляли 5-10. Однако Текущих Анонимных Пользователей было около 200. А потом, пока я смотрел, Текущие Анонимные Пользователи начали круто расти, примерно до 500 в течение нескольких минут. Все это время Get requests / sec и Requests / sec для ASP.NET не выполнялись.

Я проделал массу вещей (в панике!), Чтобы попытаться заставить сайт работать, например, выключил его, перезапустил пул приложений и добавил еще один рабочий процесс в пул. Я также увеличил срок хранения содержимого (в IIS в разделе HTTP-заголовков), пытаясь уменьшить количество запросов на статические файлы (на сайте много изображений).

Теперь сайт вернулся в нормальное состояние, а счетчики стабильны и показывают (добавлен счетчик текущих подключений):

Я также наблюдал обратную связь между запросами на получение в секунду и текущими анонимными пользователями. Обычно и то и другое довольно стабильно, но будут короткие периоды, когда количество запросов на получение в секунду резко снизится, а количество текущих анонимных пользователей будет расти в идеальном зеркальном отображении. Затем они вернутся к своему обычному уровню.

Итак, мои вопросы:

Если подумать об исходной проблеме производительности - если процессор w3wp.exe, использование памяти было нормальным и не было узких мест в БД, что могло бы объяснить запросы страниц, которые обслуживаются в 20 раз дольше, чем обычно? На какие еще счетчики мне следует смотреть, если это произойдет снова?

Чем объясняется обратная связь между запросами на получение в секунду и текущими анонимными пользователями?

Чем можно объяснить рост числа нынешних анонимных пользователей с 200 до 500 за несколько минут?

Большое спасибо за понимание этого.

Нашел ответ на Чем объясняется обратная связь между запросами на получение в секунду и текущими анонимными пользователями? Вот: http://www.it-notebook.org/iis/article/current_connections_users.htm

Current Anonymous Users - это измерение активных анонимных запросов, обрабатываемых в настоящее время. После обработки запроса (что обычно происходит довольно быстро) "Текущие анонимные пользователи" уменьшаются..

Таким образом, если обработка запросов занимает много времени, количество запросов на получение / сек уменьшится, а число текущих анонимных пользователей возрастет.