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

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

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

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

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

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

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

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

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

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

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

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

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

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

Для высокопроизводительных веб-сайтов 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 

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

Видеть:

(от моего Переполнение стека ответ)

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