【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レイヤのキューがいっぱいになると、それ以上の接続要求は拒否されるか、タイムアウトになります。

上述のパラメータの内容をまとめておきます。性能試験の結果を踏まえて適切な値にチューニングすることを推奨いたします。

参考資料

参考にしたサイトを記載しますので、もっと詳細を知りたい方はぜひご覧になってください。

【真夏の夜のミステリー】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

おわりに

最後まで読んでいただき、ありがとうございました。ほかにもチューニング関連のコンテンツを配信していますので、ぜひ目を通してもらえると嬉しいです。
【Apache】並列処理の仕組みとチューニング方法をまとめてみた。

コメント