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

IIS7 сотни подключений в CLOSE_WAIT

У меня есть приложение .Net на моем сервере IIS7, оно работало нормально, пока мне не пришлось переместить его на другой сервер.

Я переместил тот же код на новый сервер и заметил, что через несколько часов веб-сайт перестал отвечать на удаленные запросы, но если я сделал удаленный рабочий стол на сервере, он ответил на запрос, сделанный на localhost. Если я остановлю веб-сайт и пул приложений, он снова заработает нормально.

Мне удалось отследить проблему по сотням запросов, оставшихся в состоянии CLOSE_WAIT на http-порт, которые никогда не закрывались (я ждал несколько часов, и они остались прежними).

Есть идеи?

Какая у вас версия http.sys? Вы можете попробовать следующее обновление:

Повышенная задержка возникает при HTTP-подключении к компьютеру под управлением Windows Vista, Windows 7, Windows Server 2008 или Windows Server 2008 R2, если подключение осуществляется через балансировщик нагрузки.
http://support.microsoft.com/kb/2634328

Вы также должны подтвердить значение TCP KeepAliveTime. По умолчанию это значение составляет два часа. Обычно рекомендуется уменьшить это значение, особенно для веб-серверов, подключенных к Интернету. Пять минут работают во многих случаях, хотя вы можете установить это значение, равное тайм-ауту состояния сеанса (по умолчанию 20 минут), чтобы ваши веб-разработчики не возненавидели вас. Чтобы установить значение 20 минут, используйте шестнадцатеричное значение двойного слова 0x00124F80:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]  
"KeepAliveTime"=dword:00124F80  

KeepAliveTime
Ключ: [HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters]
Тип значения: REG_DWORD - время в миллисекундах.
Допустимый диапазон: 1–0xFFFFFFFE
По умолчанию: 7 200 000 (два часа)
Описание: это значение определяет, как часто TCP пытается проверить целостность незанятого соединения, отправляя пакет проверки активности. Если удаленная система все еще доступна и работает, она подтверждает передачу подтверждения активности. Пакеты проверки активности по умолчанию не отправляются. Эта функция может быть активирована приложением при подключении.

Другой потенциальный подозреваемый - расширенные возможности TCP / IP в Windows. Эти функции могут привести к возникновению тонких и трудно диагностируемых проблем, а драйверы должны быть надежными. Поскольку большинство серверов HP и Dell имеют чипы Broadcom, а Broadcom известен дефектными драйверами для этих функций, это стоит рассмотреть. Я лично отключаю эти функции, если я не могу продемонстрировать измеримые преимущества их включения. Вот команды для ввода в командной строке с повышенными привилегиями, которые отключат эти функции:

netsh interface tcp show global  
netsh interface tcp set global autotuninglevel = disabled  
netsh interface tcp set global rss = disabled  
netsh interface tcp set global chimney = disabled  
netsh interface tcp set global netdma = disabled  

Проверьте статья может помочь вам понять и устранить проблему. Я также проверю наличие драйвера сетевой карты на сервере и обновлю его до последней версии.