web-dev-qa-db-ja.com

tcp_tw_reuse vs tcp_tw_recycle:どちらを使用しますか(または両方)?

かなりの数の接続を使用するWebサイトとアプリケーションがあります。通常、静的に開かれた約3,000の接続があり、数秒の時間枠で5,000〜50,000の接続試行を受信できます。

TIME_WAITステータスソケットが原因で、新しい接続を開くためにローカルポートが不足するという問題がありました。 tcp_fin_timeoutを低い値(1〜5)に設定しても、これはオーバーヘッド/スローダウンが大きすぎるように見え、新しいソケットを開くことができない場合があります。

私はtcp_tw_reuseとtcp_tw_recycleを見てきましたが、どちらが好ましい選択であるか、または両方を使用することがオプションであるかどうかはわかりません。

50
Michael Marsee

Linuxのドキュメント によると、TCP_TW_REUSEフラグを使用して、新しい接続でTIME_WAIT状態のソケットを再利用できるようにする必要があります。

多くの短いTCP TIME_WAIT状態のままになっている接続を処理する必要があるWebサーバーを処理する場合、これは適切なオプションのようです。

here で説明したように、TCP_TW_RECYCLEはロードバランサーの使用時にいくつかの問題を引き起こす可能性があります...

編集(警告を追加する;)):

@raittesのコメントで言及されているように、「ロードバランサーを使用する際の問題」は公開サーバーに関するものです。リサイクルが有効になっていると、サーバーは同じNATデバイスの背後にある異なるクライアントからの新しい着信接続を区別できません。

55
Cédric Julien

注意: net.ipv4.tcp_tw_recycleはLinux 4.12から削除済みでした.

ソース: https://vincent.bernat.im/en/blog/2014-tcp-time-wait-state-linux

16
pevik