IIS перестает отвечать

Я использую IIS (в Windows 2003) и разместил dummy.html на моем веб-сайте по умолчанию. Файл пуст.

Я использую wfuzz для доступа к этому файлу большое количество раз (wfuzz выполняет HTTP-запросы) с помощью следующей команды:

wfuzz.exe -c -z range -r 0-5000 " http://localhost/dummy.html"

Я запускаю 5 Parallell WFUZZ в течение некоторой минуты, а затем IIS перестает отвечать. Когда это происходит, я больше не могу подключиться к локальному хосту telnet на порту 80. Если я остановлю клиентов wfuzz и подожду минуту, я снова смогу подключиться к порту 80 telnet.

Я вижу эту проблему, только если я выбрал Включить HTTP Keep-Alives в IIS. Если я отключу эту опцию, проблема, похоже, исчезнет. Я могу запустить 15 wfuzz в течение нескольких минут и по-прежнему без проблем подключиться к локальному хосту через порт 80.

IIS настроен на использование неограниченного количества подключений.

Итак, почему IIS перестает отвечать после того, как включена опция HTTP Keep-Alives?

Сначала я подумал, что проблема заключалась в том, что число сокетов в состоянии TIME_WAIT было слишком велико, но я не понимаю, почему отмена выбора Включить HTTP Keep-Alives решит проблему, если это было причиной. Если мой клиент отключается между каждым запросом, я не вижу, чтобы этот параметр влиял на поведение IIS.

3 ответа

Включить HTTP Keep-Alives пытается держать соединения открытыми, чтобы позволить клиентам загружать несколько ресурсов без дополнительных затрат на установку нового соединения для каждого. Тайм-аут - это как долго он ждет.

Даже с настройкой неограниченного количества подключений в IIS все еще существует ограничение на количество подключений, которое может обрабатывать аппарат. Повторно настраивая новые в вашем тесте на удар, вы достигли этого предела и заблокировали новое при создании telnet.

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

Как и большинство вещей, поиск наилучшего параметра - это балансирование, которое будет зависеть от вашего фактического использования.

Это было состояние TIME_WAIT, которое вызвало это. Я изменил тайм-аут для состояния TIME_WAIT в реестре, и проблема исчезла. Все еще не уверен, как Enable HTTP Keep-Alives может повлиять на это, но...

Для высокопроизводительных веб-сайтов MS рекомендует следующие изменения:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"EnablePMTUDiscovery"=dword:00000001
"MaxUserPort"=dword:0000fffe
"TCPTimedWaitDelay"=dword:0000003c
"TCPMaxSendFree"=dword:0000ffff
"SynAttackProtect"=dword:00000001 

Обратите внимание, что сервер должен быть перезагружен, чтобы эти изменения вступили в силу.

Увидеть:

(из моего ответа StackOverflow)

Другие вопросы по тегам