
Tomcatとは
Javaプログラムの一種であるサーブレットを実行するためのソフトウェアは、「Webコンテナ」と呼ばれます。中でもTomcatは、Apacheと連携して導入されることが多いOSSであり、デファクトスタンダードな存在です。そのため、まずはTomcatの基本的な仕組みを理解しておくことが重要です。
Webコンテナにはほかにも、JBoss、日立のCosminexus、富士通のInterstage Application Serverといった製品がありますが、基本的な考え方は共通している部分も多いため、まずはTomcatを使って動作の仕組みを押さえておくことをおすすめします。
Tomcatの並列処理の仕組み
Tomcatはリクエストを受け付けると、まずそれをキューに格納します。キューに登録されたリクエストは、acceptスレッドによって取り出され、workerスレッドに渡されます。各workerスレッドはクライアントとの通信処理を個別に担当します。
Tomcatにおけるリクエスト処理の流れは以下の通りです。
①クライアントからのリクエストは、まずWebサーバー(Apache)によって受け付けられます。
②mod_proxy、mod_jkなどのApacheコネクタが、Tomcatへリクエストを転送します。
③TomcatのAcceptスレッドがキューからリクエストを取り出し、Acceptorキューに格納します。
④Thread Pool内のworkerスレッドがリクエストを取得し、処理を開始します。
⑤workerスレッドがクライアントとの通信を担当し、レスポンスを返します。
Tomcatのチューニングパラメータ
Tomcatでは、受信したリクエストごとに1つのworkerスレッドが必要になります。現在利用可能なworkerスレッド数より多くのリクエストが到達した場合、maxThreadsで設定された上限まで、追加のworkerスレッドが動的に生成されます。
それでも同時リクエストが処理能力を上回る場合、Tomcatは現在の接続数がmaxConnectionsの上限に達するまで、新たな接続を受け付けます。上限を超えたリクエストは、Acceptorスレッドによって内部のキューに一時的に格納され、workerスレッドが空くのを待ちます。
このとき、さらにリクエストが殺到し、maxConnectionsを超えた場合は、あふれた接続要求がOSレイヤの接続キューに送られます。このキューの最大数はacceptCountで制御されます。acceptCountの上限を超えた接続は、拒否されるか、タイムアウトによって切断されます。
上述のパラメータの内容をまとめておきます。性能試験の結果を踏まえて適切な値にチューニングすることを推奨します。
| パラメータ名 | 説明 | デフォルト値 |
|---|---|---|
| acceptCount | すべてのworkerスレッドが使用されているときに受付可能な最大キュー長。キューがあふれた場合は受信した要求は拒否される。 | 100 |
| maxConnections | サーバが受け入れて処理できる最大接続数。上限に達した場合は接続を受け付けはするが、workerスレッドによる処理はされず待ちとなる。 | 10000 |
| maxThreads | リクエストを処理するworkerスレッドの上限(最大同時実行数)。HTTP、AJPなどのコネクタごとに上限が設定される。 | 200 |
参考資料
参考にしたサイトを記載しますので、もっと詳細を知りたい方はぜひご覧になってください。
【真夏の夜のミステリー】Tomcatを殺したのは誰だ?
https://atmarkit.itmedia.co.jp/ait/articles/0708/27/news098.html
Tuning Apache Tomcat for handling multiple requests
https://medium.com/@mail2dinesh.vellore/tuning-apache-tomcat-for-handling-multiple-concurrent-requests-99eee0d76dc0
まとめ
本記事では、Javaのサーブレットを実行するWebコンテナとして広く利用されているTomcatについて、その基本構造と並列処理の仕組み、さらに性能チューニングのポイントを整理しました。
- Tomcatの基本構造:ApacheなどのWebサーバと連携して利用されるOSSのWebコンテナで、サーブレットを効率的に実行する環境を提供します。Tomcatを理解することで、他のWebコンテナ製品でも応用可能な基本知識を身につけることができます。
- 並列処理の流れ:リクエストはApacheコネクタ経由でTomcatに渡され、acceptスレッドがキュー管理、workerスレッドが個別処理を担当します。これにより多数の同時リクエストを効率的にさばくことが可能です。
- チューニングパラメータ:
maxThreads、maxConnections、acceptCountなどのパラメータを適切に設定することで、同時接続やリクエスト数が増えた際の性能劣化を防ぐことができます。性能試験結果を基に調整することが重要です。
Tomcatは設定次第で性能が大きく変わるため、システム要件やアクセス状況を踏まえてチューニングすることが推奨されます。本記事で紹介した内容を押さえることで、Tomcatの基本的な動作やパフォーマンス管理のポイントを理解し、より安定したWebサービス運用につなげることができます。
ほかにもチューニング関連のコンテンツを配信していますので、ぜひ目を通してもらえると嬉しいです。
【Apache】並列処理の仕組みとチューニング方法をまとめてみた。


コメント