我正在使用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
请注意,服务器需要重新启动才能进行这些更改。
看到:
(从我的StackOverflow答案)