大量のアクセスがあるサーバは、TCPのTIME_WAITを設定   

2006年 10月 24日

自分と世の中のサーバエンジニアさんのために覚書。

Windowsサーバに大量のアクセスをすると、ポートが全て使われてアクセスできなくなってしまった。まだ余力がありそうなのに何故?と思ったら、通信が終わったコネクションがTIME_WAITの状態で長時間残っているためでした。

TIME_WAIT、というかTCP通信の状態遷移については、@ITのこちらの記事が詳しいのでリンクを張っておきます。

TIME_WAITってのは、もう通信の終わった状態なのですが、WindowsではこのTIME_WAITのコネクションを4分間も保持しています。RFC1337で定義されている
ようですが、ネットワークが遅かった時代の基準ですね~。時代に合わせてRFCも改定すればいいのに。

この待ち時間はレジストリの変更で短くできます。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\TcpTimedWaitDelay

デフォルトでは存在していないので、DWORDを新規に作ります。

また、OSが使用するポートの数もデフォルトで5000と少なめですので、これも増やすとサーバのパフォーマンスが上がります。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\MaxUserPort

これもデフォルトで存在していませんので、DWORDを作ります。最大は65534って書かれていたり65535って書かれていたりマチマチです。うーん、なんで4?16ビット-1で65535じゃないのか?

さて、Windowsについては結構情報があるのですが、「Linuxはどうなの?調べといて」と言われてしまったので調べました。

/proc/sys/net/ipv4/tcp_fin_timeout

ここに書かれています。RedHatES4の場合、60でした。時代遅れなRFC1337なんて無視!ってことですね(笑)。同じパスにtcp_frc1337というファイルがありますが、これを1にすると「TIME_WAITをしない」なんて設定もできるようです。

他にも色々とTCPに関する設定があります。あまり知られていない設定が詳しいので、リンクを残しておきます。
[PR]

by keta_m | 2006-10-24 11:17 | コンピュータ

<< U-21 日本 2-0 中国 ... 第29節 ジュビロ磐田 1-2... >>