【Tomcat】スレッド数の上限を設定してチューニングする方法
Tomcatとは Javaプログラムの一種であるサーブレットを動作させるためのWebコンテナと呼ばれるソフトウェアとなります。Apacheと連携して導入されるOSSのデファクトスタンダートなソフトウェアとなりますので、基本的を理解しておきましょう。ほかにもJBossや富士通社のInterstage Application Server等の製品がありますが、考え方としては似ているところが多いので、まずはtomcatの動きを抑えておくことを推奨します。 Tomcatの並列処理の仕組み Tomcatはリクエストを受け付けるとキューに格納します。キューに格納されたリクエストはacceptスレッドによってworkerスレッドに渡され、ひとつのworkerスレッドがクライアントとの通信を行います。 1. クライアントがリクエストを投げると、まずはWeb Server (Apache)にて受付を行う 2. mod_jkなどのApacheコネクタがtomcatに対してリクエストを投げる 3. Acceptスレッドがキューからリクエストを取り出し、Acceptorキューに格納 4. Thread Poolにあるworkerスレッドがリクエストと結びつく 5. workerスレッドがクライアントとの通信を行う Tomcatのチューニングパラメータ Tomcatにおいては、受信リクエストごとにworkerスレッドを必要とします。現時点で利用可能なworkerスレッドで処理できる数よりも多くのリクエストを受信した場合、maxThreadsで設定された最大値まで追加のworkerスレッドが作成されます。さらに同時リクエストを受信すると、Tomcatは現在の接続数がmaxConnectionsに達するまで新しい接続を受け付けます。上限を超えたリクエストは、workerスレッドが利用可能になるまでAcceptorキューに入れられます。リクエスト数がmaxConnections に達すると、OSはあふれたリクエストをOSレイヤのキューに入れます。OSが提供する接続キューのサイズはacceptCountで制御することが可能です。OSレイヤのキューがいっぱいになると、それ以上の接続要求は拒否されるか、タイムアウトになります。 上述のパラメータの内容をまとめておきます。性能試験の結果を踏まえて適切な値にチューニングすることを推奨いたします。 参考資料
2023/08/31 07:05