ASP.NET スレッドプール枯渇の再現(2) の続き。
前回までで、自家製テスト用クライアントや、IEの同時接続数を増やすことができ、同時間帯の多数の Web 要求を送信できる環境がだいぶん整った。
ということで調子にのってガンガン要求送信を試していたら、またまたエラーが。
いろいろ試行錯誤しているうちに、netstat コマンドで TCP ソケットの状況を確認したところ、相当数の "TIME_WAIT" のままの TCP 接続が残っていることがわかった。
TIME_WAIT?
なんじゃらほいと Google 検索であちこち調べ歩く内に、下記ページを発見。
Windowsにおけるソケットの最大値とTIME_WAITの時間を修正しよう
http://nosa.cocolog-nifty.com/sanonosa/2006/04/windowstime_wai_00d2.html
Windows の既定では TCP 接続が閉じられて TIME_WAIT になっている期間は 4 分とのことだそうだ。4分経過するまでこのポートは使えなくなるので、もしかするとこのことが原因で使用可能なポートが枯渇してしまったのかもしれない。
どの程度の値が最適値なのかわからなかったが、とりあえず、TIME_WAITの時間を30秒に変更したところ、エラーはでなくなり、安定してテストができるようになった。
ソケットの最大数を増やす方法もあったのだろうが、とりあえずテストが安定しだしたので、これでよしとしてみる。
ということで、いよいよ ASP.NET スレッドプール枯渇による Server too busy の再現になるかとおもいきや、これまたなかなか再現にはこぎ着けられなかった(つづく...)。