この章では、Oracle COREid Federationに関する問題について説明します。この章の内容は次のとおりです。
この項では、一般的な問題とその対処方法について説明します。この項の内容は次のとおりです。
ここでは、Oracle COREid FederationのWebプロキシをチューニングする方法を説明します。この項の内容は次のとおりです。
Oracle COREid Federation製品は、主に次の2つのコンポーネントで構成されています。
フェデレーション・サーバー(Apache Tomcatサーブレット・コンテナとともにパッケージされているJ2EEアプリケーション)
および
Webプロキシ(Apache 2.0 HTTPサーバーに基づき、クライアント証明書認証についてフェデレーション・サーバーと通信する機能を含む)
Oracle COREid Federationのパイロットおよびテスト段階から本番デプロイにサイトを移動する際は、パフォーマンスに留意することが重要です。特に次の点に注意してください。
スケーラビリティ
信頼性と障害処理
これらの領域では、リクエスト処理タスクを実行するApache 2.0 HTTPサーバーのチューニングが不可欠です。このドキュメントでは、Apacheプロセス・モデル、チューニング・パラメータ、およびOracle COREid Federationのデプロイにおけるパフォーマンス上の考慮事項について説明します。
注意: Apache 2.0 HTTPサーバーはサード・パーティ製品であり、Oracle COREid Federationのデプロイ、およびそのサポートの文脈でのみ紹介されます。Apache 2.0 HTTPサーバーの詳細な製品情報は、Apache Software Foundationに問い合せてください。 |
Apache MPMには様々なモデルが用意されています。
Windowsでは、Apache 2.0 HTTPサーバーによってWindows MPMというMPMアーキテクチャがサポートされます。Windows MPMは、1つのマルチスレッド・プロセスを使用してすべてのリクエストを処理します。
UNIX/Linuxプラットフォームでは、Apache 2.0 HTTPサーバーに対して、次の2つのマルチプロセッシング・モジュール(MPM)アーキテクチャが用意されています。
Apache MPM prefork
Apache MPM preforkモジュールは、スレッドを使用せず、先行してforkを実行するWebサーバーを実装します。これにより、Apache 1.3モデルに対応するプロセス・モデルが提供されます。このモデルでは、1つの制御プロセスが、それぞれにシングル・スレッドである複数の子プロセスを起動します。各子プロセスは接続リクエストをリスニングして、リクエストが着信したら応答します。つまり、各リクエストは1つのシングルスレッド・プロセスによって処理されます。
MPM preforkは、Apache 2.0 HTTPサーバーのデフォルトのMPMです。Oracle COREid FederationのWebプロキシは、このMPMモデルを利用しています。
Apache MPM worker
Apache MPM workerモジュールは、マルチプロセスでマルチスレッドのWebサーバーを実装します。このモデルでは、1つの制御プロセスが複数の子プロセスを起動します。各子プロセスは、一定数のサーバー・スレッドとリスナー・スレッドを1つ起動します。これにより接続リクエストをリスニングし、着信したリクエストをサーバー・スレッドに渡して処理します。
注意: COREid FederationのWebプロキシでは、Linuxでのみprefork MPMが提供されます。MPMはApacheのコンパイル時設定であるため、worker MPMを使用するようにプロキシを再構成することはできません。したがって、worker MPMの構成オプションはCOREid FederationのWebプロキシに適用されません。 |
同時リクエスト数が比較的少なく、マシンのリソースに制約がない場合は、worker MPMおよびprefork MPMにパフォーマンス上の大きな違いはありません。
worker MPMを使用する利点は、そのスケーラビリティにあります。worker MPMを使用すると、(より大きいけれども)より少ないプロセスでより多くのリクエストを処理できます。しかし、このスケーラビリティには次の欠点があります。
スレッド処理の複雑さが増加する
障害の処理能力が低下する
シングルスレッドを使用するprefork MPMでは、ロードしたモジュールが失敗した場合、コア・ダンプは1つのリクエスト(つまり、そのプロセスによって処理されていたリクエスト)にのみ影響します。workerモデルでは、そのようなコア・ダンプによって、特定のプロセスのすべてのスレッドで処理されているすべてのリクエストが停止します。
スケーラビリティを向上させるために(workerモデルで)スレッド数を増やすことにより、プロセス障害の影響を受けるリクエスト数も増加します。
Oracle COREid FederationのWebプロキシで利用する、prefork MPMモデルをチューニングする際に考慮するいくつかのパラメータを次に示します。
MaxClients
: サーバーで処理可能な同時リクエストの最大数を設定します。
StartServers
: リスナーの起動時に生成される子プロセスの数を設定します。このパラメータは、サーバーで処理する同時ユーザーのおおよその平均値に設定します。
MinSpareServers
およびMaxSpareServers
: それぞれに、アイドル状態にある子プロセスの最小数と最大数を定義します。メモリーによほどの制約がないかぎり、比較的大きな値を設定できます。
MaxRequestsPerChild
: (サーバーが古いプロセスを停止して新しいプロセスを起動することによって)子プロセスがリサイクルされるまでに、個々の子プロセスが処理するリクエスト数を設定します。このパラメータは、メモリーまたは他のリソースをリークする可能性のある、信頼性の低いモジュールで使用します。通常は、この値を0に設定します。これにより、子プロセスはリサイクルされなくなります。
これらのパラメータの例を次に示します。たとえば、サーバーでの同時リクエスト処理数が平均75、リクエスト数が150となるピークが散発的に発生すると予測する場合は、次のように設定することをお薦めします。
MaxClients 200 StartServers 75 MinSpareServers 20 MaxSpareServers 50
worker MPMモデルをチューニングする際に考慮するいくつかのパラメータを次に示します。
ThreadsPerChild
: それぞれの子プロセスで生成されるスレッド数を設定します。
MaxClients
: 起動可能なスレッドの最大総数を設定します。
StartServers
: 最初に起動されるプロセス数を指定します。
MinSpareThreads
およびMaxSpareThreads
: Apacheでは、すべてのプロセスのアイドル・スレッドの総数を追跡し、プロセスをforkおよび停止することによって、その総数をMinSpareThreads
およびMaxSpareThreads
で指定した範囲内に維持します。
MaxRequestsPerChild
: 古いプロセスを停止して新しいプロセスを起動することによりサーバーが子プロセスをリサイクルする頻度を設定します。
ServerLimit
: アクティブな子プロセスの絶対的な上限値を設定します。
推奨される構成値および関連情報は、http://httpd.apache.org/docs/2.0/mod/worker.html
を参照してください。
次の情報を収集しておくと、Oracle COREid FederationのWebプロキシのパフォーマンスを分析する際に役立ちます。
重要なチューニング・パラメータの設定
Apache MPM preforkでは、次の情報を収集します。
MaxClients
StartServers
MinSpareServers
MaxSpareServers
MaxRequestsPerChild
Apache MPM workerでは、次の情報を収集します。
MaxClients
StartServers
ThreadsPerChild
MinSpareThreads
MaxSpareThreads
MaxRequestsPerChild
mod_status
の出力
この出力は、処理が行われているURLやリクエストの状態(クライアントから読取り中、リクエスト処理中、レスポンスへの書込み中)など、Apacheの各処理単位(スレッド/プロセス)で何が行われているかを確認する際に役立ちます。
ハングしているリクエストがある場合、mod_status
からのダンプには、それらのリクエストを処理しているプロセスやダンプ発生時のプロセスの状態が記録されます。
mod_status出力の解析の詳細は、次のWebサイトを参照してください。
プロセスのスタック・トレース
mod_status
のダンプを調べてハングしているプロセスのpid
を取得し、このpid
を使用してプロセスのスタック・トレースを取得します。これは、リクエストがスタックしている場所を判断する際に役立ちます。
スタック・トレースの取得に使用するツールについては、該当するプラットフォームのドキュメントを参照してください。たとえば、次のLinuxのman
ページには、pstack
の詳細が記載されています。
ユーザー数を拡大するにしたがって、Oracle COREid FederationのWebプロキシのパフォーマンスを監視することが非常に重要になります。パフォーマンスは、Apacheの重要なMPM構成パラメータを管理し、mod_status
出力およびハングしているプロセスのスタック・ダンプを収集して分析することによりチューニングします。
Apache MPMモジュールの詳細は、次のWebサイトを参照してください。