IIS(Windows 2003の場合)を使用していて、デフォルトのWebサイトにdummy.htmlを配置しました。ファイルは空です。
次のコマンドを使用して、 wfuzz を使用してこのファイルに何度もアクセスしています(wfuzzはHTTP要求を実行します)。
wfuzz.exe -c -z range -r 0-5000 "http://localhost/dummy.html"
5つの並列wfuzzを数分間実行すると、IISが応答を停止します。これが発生すると、ポート80でローカルホストにtelnetできなくなります。wfuzzクライアントを停止して1分間待つと、ポート80を再びtelnetできます。
この問題は、選択した場合にのみ表示されます HTTPキープアライブを有効にする IISで。このオプションを無効にすると、問題は解決したようです。 15 wfuzzを数分間実行しても、ポート80でローカルホストに問題なくtelnet接続できます。
IISは、無制限の数の接続を使用するように構成されています。
では、なぜIISは、1分後に応答を停止するのでしょうか。 HTTPキープアライブを有効にする 有効になっています?
最初は、TIME_WAIT状態のソケットの数が多すぎることが問題だと思いましたが、選択を解除する理由がわかりません。 HTTPキープアライブを有効にする これが原因であれば問題は解決します。クライアントがすべての要求の間に切断した場合、この設定がIISの動作に影響を与えるとは思われません。
HTTPキープアライブを有効にする接続を開いたままにして、クライアントが各リソースに新しい接続を設定するオーバーヘッドなしに複数のリソースをダウンロードできるようにします。タイムアウトは、待機する時間です。
IISで無制限の接続を設定しても、マシンが処理できる接続の数には制限があります。ハンマーテストで新しい接続を繰り返し設定することにより、その制限に達し、ブロックされます。 telnetによって作成された新しい。
Http keep aliveを無効にするか、タイムアウトを減らすことで、接続のターンオーバーが増加しますが、テストクライアントと同じように動作しない実際のブラウザーへのオーバーヘッドが増加します。パフォーマンスを上げようとすると、実際にパフォーマンスが低下した可能性があります。
ほとんどのものと同様に、最適な設定を見つけることは、実際の使用法に依存するバランスを取る行為です。
それを引き起こしたのはTIME_WAIT状態でした。レジストリのTIME_WAIT状態のタイムアウトを変更したところ、問題は解決しました。 [HTTPキープアライブを有効にする]がこれにどのように影響するかはまだわかりませんが...
ハイパフォーマンスWebサイトの場合、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
これらの変更を行うには、サーバーを再起動する必要があることに注意してください。
見る:
(私の StackOverflow 回答から)