Topics
Enterprise Architecture
WebLogic Server 9.0におけるワークロード(作業負荷)管理
Pages:
1,
2,
3,
4,
5
前のセクションで述べたとおり、アプリケーションはディスパッチポリシーを設定して、要求のエントリポイントと、指名されたWebLogicワーク マネージャとを関連付けます。デプロイ中に、各モジュールは設定されているディスパッチポリシーを見つけて、サーブレットまたはEJBメソッド呼び出しを 特定のワークマネージャインスタンスにマップします。複数のメソッド呼び出しを、1つのワークマネージャインスタンスにマップすることもできます。特定の メソッド呼び出しやサーブレット呼び出しに対して作成されたユーザ要求はすべて、それに関連付けられたワークマネージャに自動的にディスパッチされます。 そして、それらの要求は、そのワークマネージャのプロパティを取得します。ディスパッチポリシーを新しくして、アプリケーションを再デプロイすることもで きます。
WebLogic Server 9.1では、デプロイをサポートする予定です。この計画は変更される場合があります。WebLogic Server 9.1が利用できるようになったときに、リリースノートを確認してください。
WebLogic Server 9.0のワークマネージャと自動チューニングモードをオフにして、実行キューを使用することもできます。それには、
-Dweblogic.Use81StyleExecuteQueues=trueオプション付きでサーバを起動するか、または
config.xmlで
KernelMBeanプロパティを設定します。システムプロパティを使用するよりも、
config.xmlの属性を設定する方をお勧めします。それは、管理コンソール内で実行キューのコンフィグレーションや監視をオンにできるからです。以下に、
config.xmlの一部の例を示します。
<server> <name>myserver</name> <use81-style-execute-queues>true</use81-style-execute-queues> <listen-address/> </server>
このプロパティをオンにすると、すべてのワークマネージャコンフィグレーションと、自動スレッドチューニングモードが無効になります。ユーザは、 WebLogic Server 8.1と全く同じ実行キュー動作を得ることができます。このプロパティを有効にすると、ワークマネージャのコンフィグレーションは、次の手順を使用して実 行キューに変換されます。
このフラグは、自動チューニングスレッドプールとワークマネージャの恩恵を受けられないバージョン8.1からアプリケーションを移行する際に役立ちます。おそらく、ワークマネージャを調査している間に、アプリケーションを実運用環境に移したいと考える人もいるでしょう。
このフラグが有効になっている場合は、サーバログに次のようなエントリが作成されます。
<Sep 30, 2005 11:02:52 AM PDT> <Notice> <Kernel> <BEA-000805> <Self-tuning thread pool is disabled. An execute queue will be created for each WorkManager definition.>
WebLogic Server 8.1からWebLogic Server 9.0へ移行されたアプリケーションは、移行前に実行キューが存在していた場合は、依然としてサーバコンフィグレーション内に実行キューを持っています。 実行キューからワークマネージャへの自動変換はできません。それは、ワークマネージャが必要でない場合もあるからです。実行キューを持つWebLogic Server 8.1アプリケーションが、WebLogic Server 9.0サーバにデプロイされると、同じ設定を持つ実行キューが作成されて、要求によって使われます。ディスパッチポリシーを持たない要求は、自動チューニ ングスレッドプールを使い続ける点に注意してください。実行キューにマップされたディスパッチポリシーを持つ要求だけが、設定された実行キューを使用しま す。
広範囲な監視サポートは、RuntimeMBeansによって提供されます。管理者は、個々のワークマネージャ、制約、要求クラス、および共通の自 動チューニングスレッドプールパラメータを監視できます。WebLogicコンソールの適切なタブの下にも、この情報がたくさん表示されます。管理者は、 特定のアプリケーションに移動して、そのアプリケーションに関連するすべてのワークマネージャコンポーネントを監視できます。共通スレッドプールパラメー タは、コンソールタブを監視しているサーバの下で監視されます。以下に、負荷管理についての情報を提供するRuntimeMBeansをいくつか示しま す。
WebLogic Server 8.1以前のリリースでは、実行キューに属するスレッドは、スレッドダンプの中ではその実行キューの名前を使用して識別できました。WebLogic Server 9.0では、これが変更になっています。すべてのワークマネージャが共通のスレッドプールを使用するため、スレッドダンプでは、どのスレッドがどのワーク マネージャに所属するかを識別できません。これは、スレッドがすべてのワークマネージャで共有されているからです。すべての実行スレッドの名前には、 「self-tuning」という用語が含まれています。これは、この実行スレッドが共通の自動チューニングプールに属しているこを表しています。スレッ ド名の前には、そのスレッドの状態が付加されています。スレッド名に付加される状態には、次の3種類があります。
タイマーおよびワークマネージャ仕様は、アプリケーションサーバで、アプリケーションが非同期作業をサブミットする方法を標準化したものです。WebLogic Server 9.0は、内部の自動チューニングスレッドプール実装へのハンドルをアプリケーション提供するために、この仕様を実装しています。タイマーおよびワークマネージャ仕様で見つかったワークマネージャをTWM WorkManagersと呼ぶことにします。アプリケーションは、JNDIを利用してTWM WorkManagerを検索して、非同期実行用の作業をサブミットできます。ここで重要なのは、
resource-refエントリのワークマネージャ名を使用して、TWM WorkManagerを、デプロイメント記述子を使って設定したWebLogicワークマネージャと関連付けることができるということです。以下に、例を示します。
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>WorkEJB</ejb-name>
...
<resource-ref>
<res-ref-name>MyAppScopedWorkManager-1</res-ref-name>
<res-type>commonj.work.WorkManager</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
...
</ejb-jar>
ここで、
res-ref-nameは、
weblogic-application.xmlで定義されているWebLogicワークマネージャの名前を指しています。WebLogicワークマネージャが見つからない場合は、アプリケーションのデフォルトが使われます。アプリケーションコードでは、次のようにしてTWM WorkManagerを検索できます。
InitialContext ic = new InitialContext();
commonj.work.WorkManager mgr =
(commonj.work.WorkManager)
ic.lookup("java:comp/env/MyAppScopedWorkManager-1");
mgr.schedule(myWork);
BEA WebLogic Server 9.0では、作業負荷管理において高度な技術が導入されました。管理者が、スレッド数などの低レベルのカーネルパラメータを設定したり、静的なスレッド プールを設定する代わりに、フェアシェア、応答時間目標、コンテキストベースシェアのような、差別化サービスのための上位概念が提供されています。スレッ ド数は、スループットを最大にするように自動調整されます。また、WebLogic Server 9.0では、アプリケーション開発者が、内部のサブシステムと同じ利益が得られるように、スレッドプールにアクセスする実用的な手段が提供されています。 多数の監視サポートも追加されました。これらすべての改良が、ユーザの使い勝手を向上させることを願っています。
Naresh Revanuruは、BEA WebLogicエンジニアリングチームで働くシニアソフトウェアエンジニアです。Nareshは、 BEA WebLogicコア/クラスタリングサブシステムのチームリーダを務めています。