IIS停止响应

我正在使用IIS(在Windows 2003上)并在我的默认网站中放置了一个dummy.html。 该文件是空的。

我使用wfuzz访问这个文件很多次(wfuzz做HTTP请求),使用下面的命令:

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

我运行5分钟wfuzz一分钟,然后IIS停止响应。 发生这种情况时,我不能再在80端口上telnet localhost。如果我停止wfuzz客户端并等待一分钟,我可以再次telnet 80端口。

我只看到这个问题,如果我已经在IIS中select启用HTTP保持链接 。 如果我禁用此选项,问题似乎消失。 我可以运行15个wfuzz几分钟,仍然可以在80端口telnet localhost,没有任何问题。

IIS被configuration为使用无限数量的连接。

那么,为什么启用HTTP Keep-Alives后,IIS会在一分钟后停止响应?

起初,我认为问题是在TIME_WAIT状态的套接字数量太高,但我不明白为什么取消select启用HTTP保持活动将解决问题,如果这是原因。 如果我的客户端在每个请求之间断开连接,我不会看到这个设置对IIS行为有任何影响。

启用HTTP Keep-Alives尝试保持连接处于打开状态,以允许客户端下载多个资源,而无需为每个资源build立新的连接。 超时是等待的时间。

即使在IIS中设置无限连接,机器可以处理的连接数量也是有限制的。 通过在锤击testing中重复build立新的testing,你已经达到了极限,并通过telnet阻止了新的testing。

通过禁用http保持活动状态或减less超时,你增加了连接的stream量,但是增加了对真实世界浏览器的开销,这些浏览器的行为与你的testing客户端不一样。 试图获得performance,你可能已经减less了它。

像大多数事情一样,find最好的设置是一个平衡的行为,这将取决于您的实际使用情况。

这是造成它的TIME_WAIT状态。 我修改了registry中TIME_WAIT状态的超时,问题就消失了。 仍然不知道如何启用HTTP保持活力可以影响这一点,但…

对于高性能网站,MSbuild议进行以下更改:

 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 

请注意,服务器需要重新启动才能进行这些更改。

看到:

  • 将EnablePMTUDiscovery
  • MaxUserPort的
  • TcpTimedWaitDelay的
  • TCPMaxSendFree
  • 将SynAttackProtect

(从我的StackOverflow答案)