5
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Apache-Tomcat構成における設定項目メモ

Last updated at Posted at 2021-01-20

ApacheをRverse Proxyとして使用し、Tomcatと連携を行う構成で設定の妥当性チェックを行った際に調べた内容のメモ。

前提環境

環境は以下の通り。

  • OSはWindows(ApacheのMPMはmpm_winnt)
  • Apache 2.4
  • Tomcat 8.5
  • Apache-Tomcat の連携はmod_proxy_ajpを使用

設定項目と指針

設定分類 対象通信区間 設定対象 設定名 説明 Default 単位 設定指針
最大接続数 - Apache ThreadsPerChild 子プロセスそれぞれに生成されるスレッド数
(Windows用では1プロセスのみ生成の為実質的に最大同時接続数)
64 サーバの負荷全体を十分取り扱える程度に、 大きくなければなりません。
Tomcat maxThreads リクエスト処理対して作成するスレツドの最大数(最大同時実行数)。 200 Apacheの最大スレッド数(Windowsの場合はThreadsPerChild)より大きな値を設定。
Linuxの場合はカーネルパラメータの制限にも注意が必要。
Tomcat minSpareThreads スレッドプールで管理されるタスク待ちのスレッドの最小数。
Executor属性を指定されている場合には、Executor側でスレッドプールを構成するため、Connector要素の本属性は無視されます。
10 リクエスト数が多い場合は本設定の数値を大き目に設定し、待機スレッド数を多めに持っておく
Tomcat acceptCount 可能なすべてのリクエスト処理スレッドが使用されているときに着信接続要求の最大キュー長。
キューが満杯になったときに受信された要求は拒否されます。
100 大量にキューを貯めるのを前提にするのをは望ましくない。キューを大きくする前にスレッド数の拡張または処理性能向上を検討すべき。
Linuxの場合はカーネルパラメータの制限にも注意が必要。
Tomcat maxConnections サーバーが受け入れて処理する接続の最大数。
この数に達すると、サーバーは1つの接続を受け付けるが処理はしない。
※For NIO and NIO2 the default is 10000. For APR/native, the default is 8192.
10000 or 8192 maxThreads+acceptCountの合計より大きな値に設定。
WindowsのAPR /ネイティブの場合、設定された値はmaxConnections以下の1024
の最高倍数に減少することに注意してください。
処理タイムアウト クライアント~Apache Apache Timeout ・クライアントからのデータを読み込む時。 受信バッファが空になっていて、TCP パケットが届くまで 待つ時間の長さ
・クライアントに対してデータを送り出す時。 送信バッファがいっぱいで、パケットの受信完了 (訳注: ACK) が届くまで待つ時間の長さ
・mod_cgi 内で、CGI スクリプトが出力を 返すまでの待ち時間の長さ
・mod_ext_filter 内で、フィルタ処理で出力を 待つ時間の長さ
・mod_proxy 内で、 ProxyTimeout が設定されていない場合のデフォルトの待ち時間
60 ※大きなファイルのダウンロードのようにデータが継続的に流れていれば処理タイムアウト時間を超えてもタイムアウトしない
Apache~Tomcat Apache ProxyPass connectiontimeout リバースプロキシがバックエンドのWebサーバとTCP接続するまで待つタイムアウト時間
デフォルト値はTimeOutディレクティブの値
timeout
サブパラメタの値
数秒程度が適当。但しAPサーバに接続出来ない状況にならない限りは影響はない。
Apache ProxyPass timeout 処理タイムアウト(ソケットタイムアウト)の値です。バックエンド毎に個別に指定したい場合はこちらを使用します。 ProxyTimeoutの値 バックエンド毎に個別に指定したい場合はこちらを使用し、Timeoutの値以下の時間を設定。細かい制御が不要であればProxyTimeoutで設定。
Apache ProxyTimeout 処理タイムアウト(ソケットタイムアウト)の値
バックエンドの処理タイムアウトにはProxyTimeoutディレクティブを使用
デフォルト値はTimeOutディレクティブの値
Timeoutの値 Timeoutの値以下の時間を設定
Tomcat connectionTimeout Request-Line(要求行)が表示されるために、このコネクタが接続を受け入れた後に待機するミリ秒数。(クライアント側との接続が確保されてからHTTPリクエストの開始行が受信されるまでの時間) 無限
(-1)
msec keepAliveTimeoutと値を揃えるのがベター
KeepAlive クライアント~Apache Apache KeepAlive KeepAlive(1つのTCPコネクションで複数のリクエスト、レスポンスをやり取りする仕組み)を有効にするか。有効化によりTCP接続時の3Wayハンドシェイクのような負荷の高い処理を削減する事が可能。 On - 1ページあたりのコンテンツが多い場合はOnにする事により性能向上が可能
Apache KeepAliveTimeout 接続しているセッションからのリクエストが来なくなってから切断するまでの待ち時間 5 Webブラウザなどのユーザエージェントと直接接続する場合はキープアライブタイムアウトは短め(1~5秒程度)とするのが適当。
Webブラウザは同時にいくつものTCPコネクションをオープンしてコンテンツを連続的にダウンロードする為、短い時間でも十分。逆に長すぎると通信が終わってもWebブラウザとのコネクションを開放せず、Apache側の最大接続数に達してしまう可能性がある。
Apache MaxKeepAliveRequests MaxKeepAliveRequestsは、接続してから切断するまでに受け付けるリクエストの数 100 この設定は、サーバ性能を向上させるために、大きな数値を指定すること勧めます。
Apache~Tomcat Apache ProxyPass keepalive ファイアウォールは往々にして、 非活動状態のコネクションを落とそうとします。 このフラグは OS に指示して、KEEP_ALIVE メッセージを非活動状態の コネクションでも送るようにします (間隔は OS のグローバル設定に依存し、 通常は 120ms 間隔) 。これによってファイアウォールによってコネクションが 落とされることを防げます。keepalive を有効にするには、このプロパティを On にしてください。 Off - バックエンドサーバと Apache の間にファイアーウォールがある場合には、 このパラメータを使ってください。
Tomcat keepAliveTimeout httpレスポンスを返してから次のリクエストをスレッド待機するミリ秒数。 20,000 msec Apacheの設定と関連性を持たせる必要はない。
connectionTimeoutの属性値とkeepAliveTimeout属性値を揃えるのがベター。

参考ページ

<公式ドキュメント>
http://httpd.apache.org/docs/2.4/mod/quickreference.html
https://httpd.apache.org/docs/2.4/ja/mod/core.html#timeout
https://httpd.apache.org/docs/current/mod/mod_proxy.html#proxypass
https://httpd.apache.org/docs/current/mod/mpm_common.html
http://tomcat.apache.org/tomcat-8.5-doc/config/ajp.html

<先達のページ>
https://qiita.com/kazukikudo/items/96f77f1648b8ce47dc06
https://gakumon.tech/tomcat/server_xml/http.html

5
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?