IIS pára de responder

1

Estou usando o IIS (no Windows 2003) e coloquei um dummy.html no meu site padrão. O arquivo está vazio.

Estou usando o wfuzz para acessar este arquivo um grande número de vezes (o wfuzz faz solicitações HTTP), com o seguinte comando:

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

Eu corro 5 parallell wfuzz por alguns minutos, e o IIS pára de responder. Quando isso acontece, eu não consigo mais telnetar o localhost na porta 80. Se eu parar os clientes do wfuzz e esperar por um minuto, eu posso fazer o telnet da porta 80 novamente.

Eu só vejo esse problema se eu tiver selecionado Ativar Keep-Alives de HTTP no IIS. Se eu desabilitar essa opção, o problema parece ter desaparecido. Eu posso executar 15 wfuzz por vários minutos e ainda ser capaz de telnet localhost na porta 80 sem problemas.

O IIS está configurado para usar um número ilimitado de conexões.

Então, por que o IIS pararia de responder após um minuto quando Ativar keep-alives de HTTP estiver ativado?

Primeiro, achei que o problema era que o número de soquetes no estado TIME_WAIT era muito alto, mas não vejo por que desmarcar Habilitar Keep-Alives HTTP resolveria o problema se esta foi a causa. Se meu cliente se desconectar de cada solicitação, não vejo que essa configuração tenha algum efeito no comportamento do IIS.

    
por nitramk 19.08.2009 / 11:35

3 respostas

1

Habilitar Keep-Alives HTTP tenta manter as conexões abertas para permitir que os clientes baixem vários recursos sem a sobrecarga de configurar uma nova conexão para cada um. O tempo limite é quanto tempo aguarda.

Mesmo com uma configuração de conexões ilimitadas no IIS, ainda há um limite para o número de conexões que a máquina pode manipular. Ao configurar repetidamente novos testes no seu teste de martelação, você atingiu esse limite e bloqueou um novo sendo feito por telnet.

Ao desativar o http keep alive ou reduzir o tempo limite, você aumentou a rotatividade de conexões, mas às custas de aumentar a sobrecarga para navegadores reais que não se comportam da mesma maneira que o seu cliente de teste. Ao tentar ganhar desempenho, você pode ter reduzido isso.

Como a maioria das coisas, encontrar a melhor configuração é um ato de equilíbrio que dependerá do seu uso real.

    
por 19.08.2009 / 13:52
0

Foi o estado TIME_WAIT que causou isso. Eu modifiquei o tempo limite para o estado TIME_WAIT no registro e o problema foi embora. Ainda não tenho certeza de como o Enable HTTP Keep-Alives pode afetar isso, mas ...

    
por 19.08.2009 / 12:04
0

Para sites de alto desempenho, a MS recomenda essas alterações:

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 

Observe que o servidor precisa ser reinicializado para que essas alterações ocorram.

Veja:

(do meu StackOverflow resposta)

    
por 19.08.2009 / 20:21