Apache HTTP ServerとApache Tomcatの各種タイムアウト値

Apache HTTP Server

[httpd.conf]

Timeout
リクエストを待つ時間
デフォルト60秒(60)

ProxyTimeout
mod_proxy経由でのリクエストを待つ時間
デフォルト300秒
但し、mod_proxy 内で ProxyTimeout が設定されていない場合はTimeoutの値を参照

(Apache コア機能 TimeOut ディレクティブ より抜粋)
5. mod_proxy 内で、 ProxyTimeout が設定されていない場合のデフォルトの待ち時間

keepAliveTimeout
HTTPセッションを閉じるまでの時間
当時間を長くすればするほど同じコネクションを使い回すので反応は早いが、待ち受けしておかないといけないのでリソースを消費する
KeepAliveをonにしておき、MaxKeepAliveRequestsで許容リクエスト数を設定する必要がある
デフォルト5秒(5)

Tomcat

[server.xml]

(Executor)

maxIdleTime
アクティブスレッドがminSpareThreads以下で無い場合に、アイドルスレッドを停止するまでの時間をミリ秒指定
そのため、リクエストのタイムアウトに直接関わる値ではない
デフォルト1分(60000)

(Connector AJP/HTTP1.1)
asyncTimeout
非同期リクエストにおけるデフォルトのタイムアウト[ミリ秒]
非同期リクエストに関しては、以下の非同期処理の流れが分かりやすい(用途としてはオンラインというよりJavaBatch的な使い方か)
Tomcat 7も対応したServlet 3.0の変更点 後編:Tomcat 7の新機能で何ができるようになるのか?(2)(1/3 ページ) - @IT
デフォルト30秒(30000)

connectionTimeout

受付したConnectorが接続した後、レスポンスデータを返すまでの待ち時間
-1を設定するとタイムアウトは行わない
disableUploadTimeoutがtrueの場合は、アップロードのタイムアウトもこの値を参照する
デフォルト AJP:無限(-1) HTTP:60秒(60000)、但しserver.xmlに20秒(20000)が予め定義されている(=定義を削除すると60秒になる)

connectionUploadTimeout

データアップロード中に使用されるタイムアウト
disableUploadTimeoutがfalseが設定されている必要有
デフォルト5分(300000)

executorTerminationTimeoutLMills

Connectorの停止処理が進む前にプライベートな内部Executorがリクエスト処理スレッドが終了するのを待つ時間
デフォルト0秒[BIOコネクタ]、5秒(5000)[NIO, NIO2, ARP, nativeコネクタ]

keepAliveTimeout

HTTPコネクションを閉じる前に次のHTTPリクエストを待つ時間
-1タイムアウトせずに貼りっぱにする(この設定するのは用途限定でしないと危険すぎる…)
デフォルトはconnectionTimeoutの値を参照

socket.*

一旦割愛(必要になった時に書き加える)

pollTime

一旦詳細は割愛(必要になった時に書き加える)
この値を小さくすると、いくつけのケースでKeep Alive接続の待ち時間をわずかに効率化できるが、余程で無い限りはチューニングする値ではなさげ

(Connector HTTP2.0)
一旦割愛(必要になった時に書き加える)

(Valve)

StuckThreadDetectionValve
処理が遅い場合にログを吐き出したり、強制終了できたりする
thresholdがログだけ吐き出したい時間(秒)、interruptThreadThresholdが強制終了させる時間(秒)
定義例

<Valve className="org.apache.catalina.valves.StuckThreadDetectionValve" threshold="60" interruptThreadThreshold="120" />

CrawlerSessionManagerValve
一旦詳細は割愛(必要になった時に書き加える)
Webクローラによる大量のセッション生成を防止するためのValve

[web.xml]

session-timeout

セッションを廃棄する時間
Tomcatではこの時間の起点をthisAccessdTime(今回のアクセス開始時間)とlastAccessedTime(前回のセッションのアクセス時間=ServletAPIのgetLastAccessedTime()で返却される時間))の2つの時間で定義する。
2つのセッションのアクセス時間の計算方法は、通常は前回のアクセス終了時間からの経過時間となる。
(org.apache.catalina.session.StandardSession.LAST_ACCESS_AT_STARTのプロパティ値で決定するが、余程でない限り触りにいかなくて良いと思われる)
Tomcatとして出てくる箇所はJavaDoc位しか見つけれなかった

tomee.xml

(TransactionManager)
defaultTransactionTimeoutSeconds

コミットするタイミングで当値を経過していた場合はタイムアウトさせる
そのためコミットされないと評価されない
よく勘違いするのは、タイムアウト値過ぎてもトランザクションは動き続け、当値を評価するのはコミットするタイミングである
デフォルト10分(10 minutes)
定義例

<tomee>
 <TransactionManager id="Default Transaction Manager">
     defaultTransactionTimeoutSeconds = 10 minutes
 </TransactionManager> 
</tomee>
(STATELESS, STATEFUL)

一旦割愛(必要になった時に書き加える)

(Resources)

一旦割愛(コネクションプール側で設定する事が多いと思うので)

その他(コネクションプール)

HikariCP
いろんなサンプルが載っていたのでわかりやすかった
com.zaxxer.hikari.HikariConfig#setIdleTimeout
Tomcat JDBC Connection Pool
ぱらっと眺めるのであれば、公式よりもやはり日本語で書いてくれた方が読みやすい
Tomcat JDBC Connection Poolの存在を忘れてました - Qiita

その他(Java)

HTTPSession#setMaxInactiveInterval
セッションの有効期限の個別設定
@DataSourceDefinition#maxIdleTime
コネクションプールに未使用のまま状態で置いておく時間
@DataSourceDefinition#loginTimeout
データベース接続を行う際にログインできるまで待つ時間

com.sun.mail.smtp
(mail.smtp.connectiontimeout)
メール送信時のSocket read時のタイムアウト
デフォルト無限
(mail.smtp.timeout)
メール送信全体の処理が完了するまでの待ち時間
デフォルト無限
(mail.smtp.writetimeout)
メール送信時のSocket write時のタイムアウト
デフォルト無限
当値を制御しているのは、javamailの場合はSocketFetcher.javaである。
pop, imapも同様にタイムアウト設定があるが記載は割愛