*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秒経過)
-[[http://linux.blog.kaone.net/Entry/11/:LINUX忘却録]]