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

Сервер IIS 8 слишком занят

Я работал над этим несколько недель. У меня есть сервер IIS 8.0, приложение ASP .NET 4.0 в классическом режиме. Два файла - это GET, которые выполняют чтение файловой системы для каждого запроса, и один - post, который записывает в файловую систему. Теперь я иногда начинаю получать от сервера сообщение «Сервер слишком занят». Эта ошибка возникает периодически, когда сервер достигает этого состояния, то есть некоторые запросы возвращают 200, в то время как большинство из них возвращают «Сервер слишком занят». И даже перезапуск сервера IIS не приводит к его нормальному функционированию.

Я читал о возможных причинах этой проблемы. По сути, причиной должно быть превышение лимита размера очереди, тайм-аут запросов в очереди и т. Д. Теперь есть очереди разных уровней, HTTP.sys для пула приложений, глобальная очередь ASP .Net, очередь приложений (AppDomain), очередь CLR.

Я попытался воспроизвести ошибку, отправив на сервер множество запросов GET одновременно, но размер очереди, похоже, не увеличивается так сильно, как на perfmon. Из-за этого я начал получать "Тайм-аут подключения", но не "Сервер слишком занят". Где я ошибаюсь, воспроизводя это? Это потому, что я каждый раз отправляю один и тот же запрос, и он кэшируется самим кешем http.sys?

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

Я не получил никаких сообщений об ошибках в журналах ASP .NET. В HTTPERR я могу найти много ошибок «Timer_ConnectionIdle» и очень мало «503 N / A» (служба недоступна).

Пожалуйста помоги. Заранее спасибо.

Изменить: при отслеживании запроса «Сервер занят» я получил предупреждающие события. Вот след этого:

-MODULE_SET_RESPONSE_ERROR_STATUS 


ModuleName
IsapiModule 

Notification
EXECUTE_REQUEST_HANDLER 

HttpStatus
503 

HttpReason
Server Too Busy 

HttpSubStatus
0 

ErrorCode
The operation completed successfully.
 (0x0) 

Кто-нибудь может дать какое-нибудь представление об этом?

Что касается воссоздания проблемы, то способ, которым большинство веб-серверов (включая IIS) обрабатывает несколько подключений с одного адреса / клиента, отличается от того, как они обрабатывают подключения с нескольких адресов / клиентов. Рассмотрите возможность запуска инструмента генерации нагрузки (в частности, такого, который может подделывать несколько одновременных IP-адресов или по крайней мере несколько виртуальных клиентов из генератора нагрузки), чтобы лучше понять, что может происходить. Я не использовал это, но Microsoft, по-видимому, рекомендует инструмент для этого: http://blogs.msdn.com/b/asiatech/archive/2013/01/21/how-to-perform-a-stress-test-with-wcat-tool.aspx и http://www.iis.net/downloads/community/2007/05/wcat-63-%28x64%29