Linux:OSのtcpタイムアウトのデフォルト値について の変更点
Top / Linux:OSのtcpタイムアウトのデフォルト値について
- 追加された行はこの色です。
- 削除された行はこの色です。
- Linux:OSのtcpタイムアウトのデフォルト値について へ行く。
- Linux:OSのtcpタイムアウトのデフォルト値について の差分を削除
*Linux:OSのtcpタイムアウトのデフォルト値について [#x997895a] 例えば、curlを使用して、タイムアウト値を300秒に指定し、タイムアウトさせるよう無いことをしても、実際180秒を超えたくらいでタイムアウトする事象が発生していました。 これが、curlだけじゃなくて、例えばapacheのmod_proxy_balancerのバックエンドサーバへのタイムアウトについても、タイムアウト値を300秒とかでせっていしても、実際は180秒ちょいでタイムアウトしてしまっていました。 これについて、ちょっと調べたところどうもLinuxのOSとして持っているTCPのタイムアウト値が効いているようだ、ということがわかりました。 ここを見ると分かります。 #cat /proc/sys/net/ipv4/tcp_syn_retries 5 これはtcpのsynを送信するリトライ回数みたいで、以下のロジックでリトライをされるようです。 >3*2^(N-1)秒の間隔(NはN回目のSYN)を空けてSYNパケットが送信される 詳しくはこちらのサイトで解説されています。 ※一部引用 >最初のSYN送信 (0秒経過) >3秒経過してACKが、戻らないとき、SYN(1)を再送します。 (3秒経過) >また、6秒経過してACKが、戻らないとき、SYN(2)を再送します。 (9秒経過) >また、12秒経過してACKが、戻らないとき、SYN(3)を再送します。 (21秒経過) >また、24秒経過してACKが、戻らないとき、SYN(4)を再送します。 (45秒経過) >また、48秒経過してACKが、戻らないとき、SYN(5)を再送します。 (93秒経過) >また、96秒経過してACKが、戻らないとき、ここでタイムアウトが発生します (189秒経過) -[[LINUX忘却録 Linuxのコネクトタイムアウト:http://linux.blog.kaone.net/Entry/11/]] なるほど!こういうことで189秒とかでTCPがタイムアウトしてしまうわけですね! 勉強になりましたw ちなみに、設定変更は「/proc/sys/net/ipv4/tcp_syn_retries」の値を書き換えてあげればよいみたいです。