3.6 流量制御について
流量制御とは、リクエスト処理が集中した状態でもシステムを安定して稼働させるために、システムで処理するリクエストの数を制御することです。Java EEサーバで一度に実行されるリクエスト処理数の最大値を制御したり、EJBプールにプールするBean数やJDBCコネクションプールにプールするJDBCコネクション数を制御したりすることで、Java EEサーバの負荷を一定に抑え、安定したスループットを実現できます。
流量制御の仕組み
リクエスト処理の流れと流量制御の対象について次の図に示します。
制御対象リソースと設定するパラメーターについて次の表に示します。図中の項番と表の項番が対応しています。
項番 |
制御対象リソース |
制御内容 |
設定するパラメーター |
---|---|---|---|
1 |
Web Serverサーバプロセス/サーバスレッド |
Web Serverのサーバプロセス/サーバスレッドは、主にJava EEサーバにリクエストを転送する役割を持つプロセス/スレッドです。このプロセス/スレッドはJava EEサーバでのリクエスト処理が完了するまで占有されます。 最大プロセス/スレッド数を変更して、最大同時接続数を制御します。1つのリクエストに対して、プロセス/スレッドが1つ割り当てられます。また、処理しきれないリクエストを格納するキューのサイズも変更できます。 |
|
2 |
Java EEサーバ実行スレッドプール |
Java EEサーバ実行スレッドは、リクエストの解釈、Webアプリケーションの実行、およびレスポンスの構築をするスレッドです。 最大スレッド数を変更して、最大同時実行リクエスト数を制御します。1つのリクエストに対して、スレッドが1つ割り当てられます。また、処理しきれないリクエストを格納するキューのサイズも変更できます。 |
|
3 |
EJBプール |
プールする最大のBean数を変更して、同時に実行するスレッド数を制御します。1つのリクエストに対して、Session Beanが1つ割り当てられます。 なお、利用しているBean数が最大の場合に新たなBeanが必要になったとき、クライアントはBeanが利用できるようになるまで待つ必要があるため、リクエストが滞留します。 |
最大プールサイズ:configs.config.Java EEサーバの構成名.ejb-container.max-pool-size |
4 |
JDBCコネクションプール |
プールする最大のJDBCコネクション数を制御します。 なお、利用しているコネクション数が最大の場合に新たなコネクションが必要になったとき、クライアントはコネクションが利用できるようになるまで待つ必要があるため、リクエストが滞留します。 |
最大プールサイズ:resources.jdbc-connection-pool.コネクションプールID.max-pool-size |