「Tomcat」connectionTimeout について
Tomcat の connectionTimeout がよくわからなかったので調べてみた。その時のメモ。
まず、ドキュメントを見てみる。
・Apache Tomcat 7 Configuration Reference (7.0.42) - The HTTP Connector
http://tomcat.apache.org/tomcat-7.0-doc/config/http.html
こんなことが書いてある。
The number of milliseconds this Connector will wait, after accepting a connection, for the request
URI line to be presented. Use a value of -1 to indicate no (i.e. infinite) timeout. The default value
is 60000 (i.e. 60 seconds) but note that the standard server.xml that ships with Tomcat sets this to
20000 (i.e. 20 seconds).
ん~、「接続を受け入れた後に、リクエストのために、設定された秒数待つ」とかなんとか・・・
ちょっと理解に苦しみます ( 英語力&技術レベルの低い自分が悪いんだろうけど・・・ )
なので検証で動きを確かめてみた。
例えば、connectionTimeout を 5 秒として、アプリケーション側でレスポンス返すまでに 30 秒ぐらい
時間の掛かるものを用意すればどうなるのだろうか。
用意したアプリは以下の感じ。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { Thread.sleep(30000); } catch (InterruptedException e) { e.printStackTrace(); } PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<body>"); out.println("Sample !!"); out.println("</body>"); out.println("</html>"); }
結果は、普通に 30 秒後にレスポンスが返ってきて「Sample !!」と表示された。
なので、リクエスト受けてからレスポンス返すまでの時間は関係ないと思われる。
で、上記の検証している時に、たまたまパケットキャプチャ見てると気になる動きがあって、
connectionTimeout で設定した 5 秒後ぐらいに、Tomcat 側から FIN パケットが飛んでることが確認できた。
60 秒とかに設定し直すと、ちゃんと 60 秒後ぐらいに FIN パケットが飛んでることが確認できる。
この結果踏まえると、connectionTimeout は「レスポンス返却した後で接続先との接続を切断する時間」
ってことでいいんかな・・・なんかドキュメントに書いてあることも不思議とそれなりの内容に見えてきた。
結構自信ない感じですが、まぁよしとします。
以上です。