Oracle Application Server パフォーマンス・ガイド 10gリリース3(10.1.3.1.0) B31836-02 |
|
Oracle BPEL Process Managerには多数のプロパティ設定が用意されています。これらのプロパティを構成して、プロセス、ドメイン、アプリケーション・サーバー、Java仮想マシン(JVM)、デハイドレーション・ストア・データベースなどのレベルでパフォーマンスを最適化できます。この章では、これらのプロパティ設定および推奨される使用方法について説明しています。
この章には、次の項が含まれています。
この項では、主要なOracle BPEL Process Managerチューニングの概要について説明します。なんらかのプロパティ設定を行う前に、この項の内容を確認してください。
この項には、次の項目が含まれています。
Oracle BPEL Process Managerでは、ドメインおよびプロセスの構成プロパティを次の2つのレベルで設定できます。
Oracle BPEL Process Managerは、非同期コールバックを待機しながら、デハイドレーション・ストア・データベースを使用して、長期の非同期プロセスおよびそれらの現在の状態情報を管理します。データベースにプロセスを保存することでプロセスが維持され、システムの停止やネットワーク障害が発生した場合に、状態や信頼性の損失を回避できます。Oracle BPEL Process Managerには、2種類のプロセスがあります。これらのプロセスは、デハイドレーション・ストア・データベースに、それぞれ異なる影響を与えます。
永続プロセスのインスタンスは、(正常終了、異常終了にかかわらず)進行中に保存できます。永続プロセスは通常、長時間稼動し、一方向呼出しにより開始されます。メモリー不足やシステム停止時間の問題が発生するため、永続プロセスに対するメモリー最適化はできません。
BPELプロセスのインスタンスの呼出しには次の2種類があります。
表7-1は、一方向呼出しと双方向呼出しの用途について説明しています。
多重呼出し不変なアクティビティとは、再試行が可能なアクティビティ(たとえば、assignアクティビティやinvokeアクティビティなど)です。Oracle BPEL Serverでは、多重呼出し不変でないアクティビティの実行後にインスタンスが保存されます。
BPELインスタンスのライフ・サイクル全体にわたり、実行中の各時点の状態でBPELインスタンスをデハイドレーション・ストア・データベースに複数回保存できます。これは次の2つの場合に実行されます。
BPELインスタンスがデハイドレーション・ストア・データベースに保存されると、このインスタンスはデハイドレーションされたとみなされます。この後にイベントが発生した場合(アラーム時刻がきた、またはメッセージが到着したなど)、インスタンスはデータベースから読み込まれ、実行が再開されます。
双方向呼出しでは、呼び出されるプロセスが一時プロセスである場合、Oracle BPEL Serverではコール元のJava Transaction API(JTA)トランザクションが実行されます。呼び出されるプロセスが永続プロセスである、つまり進行中にデータベースの保存が行われる場合、Oracle BPEL Serverにより新しいトランザクションが作成されます。
なんらかのプロパティ設定を行う前に、この項でBPELスレッド・モデルの詳細を確認してください。
図7-1は、リクエスト/レスポンスおよび一方向のプロセス・インスタンスの呼出しにおけるスレッドの処理を示しています。
図7-1のクライアントは、スレッドT1を実行しています。コール元がプロセス・インスタンスを開始すると、同じスレッドが処理に使用されます。最終的に、データベース操作が必要になったときに、このスレッドは接続プールからデータベース接続(図7-1のC1)を取得します。
図7-1の一方向呼出しクライアントは、スレッドT2を実行しています。クライアントがプロセス・インスタンスを開始すると、呼出しリクエストがキューに置かれます。この時点で、スレッドT2はOracle BPEL Serverから解放され、コール元は自身の処理を継続できるようになります。Oracle BPEL Serverの内部では、メッセージドリブンBean(MDB)のWorkerBeanがキューの呼出しリクエストを監視しています。メッセージがデキューされると、Oracle BPEL Serverはメッセージを処理するために、別のスレッド(T3)を割り当てます。このスレッドは、インスタンスを処理するためにOracle BPEL Process Managerによって使用されます。データベース操作が必要な場合に、このスレッドは接続プールからデータベース接続を取得します。
図7-1と前述の項から、スレッド・パラメータおよび接続プール・パラメータの適切な設定について、重要な関係を導き出すことができます。
処理中の同時インスタンスの数は、リクエスト/レスポンス・クライアントのリクエスト数と、割り当てられたWorkerBeanスレッドの数によって決まります。この場合、次のような関係が成り立ちます。
DB接続数の最大値 >= (WorkerBean リスナー・スレッド) + (同時に呼び出せるリクエスト・レスポンス の最大値)
dspMaxThreads
プロパティにより、各ドメインにWorkerBeanスレッドが割り当てられます。これにより、次の関係が成り立ちます。
存在するドメインが1つのみの場合、前述の式は次のように簡略化できます。
dspMaxThreads = (WorkerBean リスナー・スレッド) DB接続数の最大値 >= (dspMaxThreads) + (同時に呼び出せるリクエスト・レスポンスの最大値)
この項では、プロセス・レベルのパフォーマンス・チューニング・プロパティについて説明します。
プロセス・レベルのパフォーマンス・プロパティは、目的のBPELプロセスで使用されるbpel.xml
ファイルで設定します。このファイルは、プロセスの.bpel
ファイルと同じディレクトリにあります。新しい設定を有効にするには、JDev_Oracle_Home
¥jdev¥mywork¥
workspace_name
¥
process_name
¥bpel¥bpel.xml
ファイルで設定を変更した後、プロセスを再デプロイする必要があります。
このプロパティは、インスタンスの完了後に保存されるデータの型(および量)を制御します。
プロセス・インスタンスが完了すると、デフォルトでは、Oracle BPEL Serverによりプロセスの最終状態(変数値など)が保存されます。完了後にその値を保存する必要がない場合、インスタンスのメタデータ(完了状態、開始日、終了日など)のみが保存されるように、このプロパティを設定できます。このプロパティは、一時BPELプロセスに適用されます。
このプロパティは、inMemoryOptimization
パフォーマンス・プロパティがtrue
に設定されている場合のみ使用されます。completionPersistLevel
プロパティは、completionPersistPolicy
プロパティとともに使用します。
このプロパティの設定は、データベース(特に、cube_instance
表、cube_scope
表およびwork_item
表)の増大に大きな影響を与える場合があります。これはスループットにも影響します(I/Oが低下するため)。
関連項目
|
このプロパティの値を次に示します。
all
(デフォルト): Oracle BPEL Serverにより、最終的な変数値、作業アイテム・データおよび監査データを含む、終了インスタンスが保存されます。この値を設定すると、データベースのサイズは増大します。
instanceHeader:
Oracle BPEL Process Managerにより、インスタンス・メタデータのみが保存されます。
次の例では、失敗したインスタンスのみが永続化されます(completionPersistPolicy=faulted
)。失敗したインスタンスについては、インスタンスに関連する変数値がすべて保存されます(competionPersistLevel=All
)。
<BPELSuitcase> <BPELProcess src="HelloWorld.bpel" id="HelloWorld"> ... <configurations> <property name="inMemoryOptimization">true</property> <property name="completionPersistPolicy">faulted</property> <property name="completionPersistLevel">All</property> </configurations> </BPELProcess> </BPELSuitcase>
このプロパティは、インスタンスを永続化するかどうか、また、どのような場合に永続化するかを制御します。保存されないインスタンスは、Oracle BPEL Controlに表示されません。このプロパティは、一時BPELプロセスに適用されます。
このプロパティは、inMemoryOptimization
がtrue
に設定されている場合のみ使用されます。completionPersistPolicy
にoff
以外の値を設定した場合、completionPersistLevel
を設定し、保存する永続データをより厳密にチューニングできます。
このパラメータは、データベース(特に、cube_instance
表、cube_scope
表およびwork_item
表)に格納されるデータの量に大きな影響を与えます。また、スループットにも影響します。
このプロパティの値を次に示します。
on
(デフォルト): 終了したインスタンスは通常に保存されます。
deferred
: 終了したインスタンスは、異なるスレッドで別のトランザクション内で保存されます。サーバーに障害が発生すると、一部のインスタンスは保存されない可能性があります。
faulted
: 失敗したインスタンスのみ保存されます。
off
: インスタンス(およびそのデータ)は保存されません。
次の例では、completionPersistPolicy
がdeferred
に設定されています。
<BPEL Suitcase> <BPELProcess src="HelloWorld.bpel" id="HelloWorld"> . . . <configurations> <partnerLinkBinding name="PartnerService"> <property name="inMemoryOptimization">true</property> <property name="completionPersistPolicy">deferred</property> </partnerLinkBinding> </configurations> </BPELProcess> </BPEL Suitcase>
BPELのinvokeアクティビティは、デフォルトでは多重呼出し不変なアクティビティです。つまり、BPELプロセスでは、invokeアクティビティの呼出し直後に、インスタンスのデハイドレーションを行いません。したがって、idempotentがtrue
に設定されている状態で、invokeアクティビティの実行直後にOracle BPEL Serverに障害が発生した場合、再起動後にもう一度このinvokeが実行されます。これは、invokeアクティビティの実行が記録されていないためです。 このプロパティは、永続プロセスおよび一時プロセスの両方に適用されます。
idempotent
がfalse
に設定されている場合、invokeアクティビティは実行直後にデハイドレーションされ、デハイドレーション・ストアに記録されます。その後、Oracle BPEL Serverに障害が発生して再起動されても、invokeアクティビティは繰り返されません。Oracle BPEL Process Managerでは、このinvokeが実行済であると認識されるためです。
idempotent
をfalse
に設定すると、フェイルオーバー時の保護機能は向上しますが、BPELプロセスがデハイドレーション・ストアにアクセスする頻度が高まるため、パフォーマンスがある程度犠牲になります。この設定は、bpel.xml
ファイル内の各パートナ・リンクに対して構成可能です。
このパラメータをtrue
に設定すると、スループットは大幅に向上する可能性があります。しかし、前述のように、サーバーに障害が発生した場合にパートナのサービスが安全に再試行できることを確認する必要があります。このプロパティをtrue
に設定できる例としては、読取り専用サービス(たとえば、CreditRatingService)やインスタンスのトランザクションを共有するローカルのEJB/WSIF起動などがあります。
このプロパティの値を次に示します。
false
: アクティビティは実行直後にデハイドレーションされ、デハイドレーション・ストアに記録されます
true
(デフォルト): Oracle BPEL Serverに障害が発生した場合、再起動後に、このアクティビティがもう一度実行されます。これは、アクティビティの呼出し直後にサーバーがデハイドレーションされず、アクティビティの実行が記録されていないためです。
次のbpel.xml
ファイルの例に、idempotent
プロパティを示します。この例は、デハイドレーション・ストア・データベースに保存される一方向呼出しメッセージを示しています。このプロパティは、各パートナ・リンクに設定できます。
<BPELSuitcase> <BPELProcess src="Invoke.bpel" id="Invoke"> <partnerLinkBindings> . . . <partnerLinkBinding name="PartnerService"> <property name="wsdlLocation"> partner-wsdl </property> <property name="idempotent">false</property> </partnerLinkBinding> </partnerLinkBindings> </BPELProcess> </BPELSuitcase>
このプロパティにより、処理対象のプロセスが一時プロセスであり、インスタンスのデハイドレーションが必要ないことを示します。true
に設定されている場合、Oracle BPEL Serverでは、そのプロセスのインスタンスが実行中のみメモリーに保持されます。このプロパティは、一時プロセス(つまり、中間プロセスのreceiveアクティビティ、pickアクティビティまたはwaitアクティビティを一切含まないもの)に対してのみ、true
に設定できます。
このプロパティのデフォルトはfalse
です。同期BPELプロセスのインスタンスは完全に永続化され、デハイドレーション・ストア・データベースに記録されます。
inMemoryOptimization
をtrue
に設定すると、デハイドレーションは解除され、インスタンスはメモリー内にのみ保持されます。永続性動作を判断するために、completionPersistPolicy
プロパティとcompletionPersistLevel
プロパティの設定も調査されます。inMemoryOptimization
プロパティをtrue
に設定すると、スループットを向上させることができます。さらに、このプロパティを前述の2つのプロパティとともに使用した場合、データベースの増大を最小限に抑えることができます。
このプロパティの値を次に示します。
次のbpel.xml
ファイルの例に、同期Hello World BPELプロセスのinMemoryOptimization
プロパティを示します。
<BPEL Suitcase> <BPELProcess src="HelloWorld.bpel" id="HelloWorld"> . . . <configurations> <property name="inMemoryOptimization">true</property> </configurations> </BPELProcess> </BPEL Suitcase>
このプロパティを使用すると、flowアクティビティまたはflowNアクティビティで複数のブランチを実行するときのパフォーマンスを向上することができます。デフォルトでは、Oracle BPEL Process Managerは単一のスレッドで実行されます。つまり、複数のブランチはパラレルではなく、順番に実行されます。このプロパティをtrue
に設定すると、各ブランチのinvokeアクティビティをパラレルで実行するための新しいスレッドが作成されます。この設定は、bpel.xml
ファイル内の各パートナ・リンクに対して構成可能です。このプロパティは、永続プロセスおよび一時プロセスの両方に適用されます。
複数のflowブランチやflowNブランチにinvokeアクティビティが存在する場合は、このパラメータをtrue
に設定することを検討してください。これは、パラレルのinvokeアクティビティが双方向の際には特に有効ですが、パラレルの一方向呼出しに対しても効果的な場合があります。
このプロパティの値を次に示します。
true
: 呼出しを実行するための新しいスレッドが生成されます。このスレッドは、基本的にはInvokerBean
メッセージドリブンBeanのスレッドです。このプロセスに、ブロックしていない他のinvokeアクティビティが存在する場合は、InvokerBean
スレッドの値を増加します。また、次のように接続プールの最大サイズも増加する必要がある場合があります。
接続プールのサイズ >= (InvokerBean リスナー・スレッド + WorkerBean リスナー・スレッド + 同時に呼び出せるリクエスト・レスポンスの最大値)
false
(デフォルト): invokeアクティビティは単一のプロセス・スレッドで実行されます。次のbpel.xml
ファイルの例では、nonBlockingInvoke
プロパティを有効化しています。
<BPELSuitcase> <BPELProcess src="Invoke.bpel" id="Invoke"> <partnerLinkBindings> . . . <partnerLinkBinding name="PartnerService"> <property name="wsdlLocation"> partner-wsdl </property> <property name="nonBlockingInvoke">true</property> </partnerLinkBinding> </partnerLinkBindings> </BPELProcess> </BPELSuitcase>
インスタンス・データは、Oracle BPEL Process Managerスキーマ表の領域を占有します。表7-2は、インスタンス・データの増大による影響を受ける表の一覧です。それぞれの表について、簡単に説明しています。これらの表は、「ドメイン・レベルのパフォーマンス・チューニング」で説明されているドメイン・レベルのパフォーマンス・プロパティに設定した値による影響を受けて増大します。
表の名前 | 表の説明 |
---|---|
|
APIを通じてログに記録される監査詳細を格納します。assignアクティビティなどでは、デフォルトで、監査詳細として変数がログに記録されます。この動作の設定には、「BPELドメインの管理」→「構成」にあるauditLevelプロパティを使用します。
監査詳細はサイズが大きいため、 関連項目: 「auditDetailThreshold BPELプロパティ」および「auditLevel BPELプロパティ」 |
|
インスタンスの監査証跡を格納します。Oracle BPEL Controlに表示される監査証跡は、XML文書から作成されます。インスタンスを1つ処理するたびに、各アクティビティはイベントをXMLとして監査証跡に書き込みます。 |
|
プロセス・インスタンス・メタデータ(インスタンスの作成日、現在の状態、タイトル、プロセス識別子など)を格納します。 |
|
インスタンスのスコープ・データ(BPELフローで宣言されている変数すべてや、フロー全体のルーティング・ロジックを支援する内部オブジェクトなど)を格納します。 |
|
受信時のコールバック・メッセージを格納します。この表には、メッセージのメタデータ(現在の状態、プロセス識別子、受信日など)のみが格納されます。 |
|
インスタンスの配信サブスクリプションを格納します。 receiveアクティビティやonMessageアクティビティのように、インスタンスがパートナからのメッセージを待っているときはいつでも、その特定のreceiveアクティビティに対してサブスクリプションが書き込まれます。 |
|
|
|
|
|
受信(呼出し)メッセージ(インスタンスの作成を生じさせるメッセージ)を格納します。この表には、メッセージのメタデータ(現在の状態、プロセス識別子、受信日など)のみが格納されます。 |
|
Oracle BPEL Process Managerスキーマ( |
|
インスタンス用に作成されたタスクを格納します。TaskManagerプロセスは、この表に現在の状態を保存します。 |
|
インスタンスにより作成されたアクティビティを格納します。BPELフローのすべてのアクティビティに |
|
システム内のすべてのラージ・オブジェクト( |
この項では、ドメイン・レベルのパフォーマンス・チューニング・プロパティについて説明します。
これらの設定は、Oracle BPEL Controlの「BPELドメインの管理」→「構成」で変更することをお薦めします。Oracle BPEL Controlでは、既存の設定と新たに入力された設定が確認され、再起動せずにこれらの検証が行われます。ドメイン・レベルのパフォーマンス設定は、SOA_Oracle_Home
¥bpel¥domains¥
domain_name
¥config¥domain.xml
ファイルにあります。domain.xml
ファイルを直接編集した場合、変更後の設定を有効にするには、Oracle BPEL Serverを再起動する必要があります。
次のプロパティは、Oracle BPEL Controlの「BPELドメインの管理」→「構成」に表示されます。「構成」タブでは、これらのプロパティの「名前」列と「コメント」列は空です。これらのプロパティはシステムのパフォーマンス・チューニングには影響がないため、編集しないでください。
パフォーマンスを最適化するために設定可能なプロパティの詳細は、これ以降の項目を参照してください。
このプロパティは、監査証跡詳細の文字列の最大サイズ(KB単位)を設定します。この値を超えた文字列は、監査証跡とは別に保存されます。監査証跡詳細の文字列のサイズがここで設定されたしきい値よりも大きい場合、監査証跡を取得しても、すぐにはロードされません。詳細の文字列のサイズとともにリンクが表示されます。このしきい値設定よりもサイズの大きな文字列は、audit_trail
表ではなく、audit_details
表に格納されます。
このプロパティは、永続プロセスに適用されます。
詳細の文字列には、通常、BPEL変数の内容が含まれます。変数が非常に大きい場合、これを監査証跡のログに記録すると、パフォーマンスに深刻な影響を及ぼす可能性があります。
デフォルト値は50
KBです。
このプロパティは、監査証跡のロギング・レベルを設定します。このプロセスは、永続プロセスおよび一時プロセスの両方に適用されます。
このプロパティは、プロセスによりログに記録される監査イベント数を制御します。監査イベントの数が多いほど、audit_trail
表に記録される件数も増えるため、この設定はパフォーマンスに大きな影響を与えます。この監査情報は、Oracle BPEL Controlでプロセスの状態を表示するためにのみ使用されます。
一部の監査情報のみを保存する場合は、このプロパティを使用します。業務の要件に応じたレベルを選択してください。監査情報は、データベースの増大およびスループットに大きな影響を与えます。パフォーマンスを最適化するには、このプロパティにできるだけ低いレベルを設定してください。
このプロパティの値を次に示します。
off
: 監査イベント(アクティビティの実行情報)は一切永続化されず、ログも記録されません。これにより、インスタンス処理に対するパフォーマンスがわずかに向上します。
minimal
: すべてのイベントがログに記録されますが、監査詳細(変数の内容)はログに記録されません。比較的ペイロードの大きいプロセスには、この設定をお薦めします。
production
: すべてのイベントがログに記録されます。assignアクティビティの監査詳細を除き、他のすべてのアクティビティの詳細はログに記録されます。比較的ペイロードの小さいプロセスには、この設定をお薦めします。
development
(デフォルト): すべてのイベントがログに記録されます。すべてのアクティビティの監査詳細もログに記録されます。
このプロパティは、BPELプロセス・コンパイラのクラスパスを設定します。
このプロパティは、サーバー側のBPELプロセス・コンパイラのクラスパスを設定します。BPELのJava実行アクティビティにより使用される(BPELアーカイブにパッケージされていない)ユーザー固有のクラスおよびライブラリは、必ずこのクラスパスに指定する必要があります。これにより、サーバー側のBPELプロセス・コンパイラで、BPELプロセスが正常にコンパイルされます。
このプロセスは、永続プロセスおよび一時プロセスの両方に適用されます。
デフォルト値は次のとおりです。
Oracle_Home¥bpel¥system¥classes; Oracle_Home¥bpel¥lib¥j2ee_1.3.01.jar
このプロパティはドメイン・データソースのJNDI名を設定します。
このデータソースは、任意のデータソースを参照できます(JTAは必要ありません)。
このプロセスは、永続プロセスおよび一時プロセスの両方に適用されます。
デフォルト値は、jdbc/BPELServerDataSourceWorkflow
です。
このプロパティにより、Oracle BPEL Serverが受信するメッセージのデータベース永続性を有効または無効にします。デフォルトでは、受信リクエストは次に示す配信サービスのデータベース表に保存されます。
これらのリクエストは、後にOracle BPEL Serverのワーカー・スレッドにより取得され、目的のBPELプロセスに配信されます。信頼性よりもパフォーマンスが重要な場合は、受信メッセージをデータベースに保存する必要はありません。このプロパティにより、配信メッセージが永続化されます。このプロパティは、永続プロセスに適用されます。
一方向呼出しメッセージは、配信されるまで配信キャッシュに格納されます。一方向メッセージが到着する割合が、Oracle BPEL Serverによりメッセージが配信される割合を大幅に上回る場合、またはサーバーに障害が発生した場合に、一部のメッセージが失われる場合があります。Oracle BPEL Control(「BPELドメインの管理」→「スレッド」)では、「保留中のリクエスト」セクションの「新規インスタンス・リクエスト」と「コールバック・リクエスト」の統計を確認することで、配信キャッシュのサイズを監視できます。「スケジュール済」列には、キャッシュされたメッセージの数が表示されます。
このプロパティの値を次に示します。
on
(デフォルト): 配信メッセージはデータベースに保存されます。
off
: 受信した配信メッセージは、メモリー内キャッシュにのみ格納されます。配信されるメッセージの数が増えると、システムはオーバーロード状態(メッセージはスケジュール済キューにバックログされる)になり、メモリー不足エラーが表示されます。受信メッセージの数に対応できるように、WorkerBeanスレッドの数をチューニングしてください。
off.immediate
: 呼出しキューのメッセージのスケジューリングを実行しないようOracle BPEL Serverに指示し、BPELインスタンスを同期的に呼び出します。このプロパティは、ディスパッチャ・エージェントのトリガー間隔を秒単位で設定します。このエージェントは、JMSレイヤーの障害のために処理されていないディスパッチャ・レイヤー内のメッセージをすべてクリーンアップします。
このプロセスは、永続プロセスに適用されます。
デフォルト値は120
秒です。
このプロパティは、受信した呼出しメッセージを処理するためにタスク化されるアクティブ・スレッドの割合を設定します。現在のスレッド割当て状態によっては、メッセージの処理を終了したスレッドをもう一度タスク化して、Oracle BPEL Serverまたは呼出しメッセージの処理に使用することができます。
このプロセスは、永続プロセスに適用されます。
デフォルト値は0.4
(40%)です。
このプロパティは、同一のリクエスト内で処理されるメモリー内アクティビティの最大数を設定します。アクティビティ・リクエストの処理後、Oracle BPEL Process Managerは、リクエストのトランザクション性を保護したまま、できるだけ多くの後続アクティビティの処理を試行します。アクティビティの処理チェーンがこの限界に達すると、そのインスタンスはデハイドレーションされ、次のアクティビティは別のトランザクションで実行されます。
リクエストの上限値が大きすぎる場合、リクエスト時間の合計はアプリケーション・サーバーのトランザクションのタイムアウト制限を上回る可能性があります。
このプロセスは、永続プロセスに適用されます。
デフォルト値は600
アクティビティです。
このプロパティは、負荷がピークに達している期間中にメッセージを処理するアクティブ・ディスパッチャ・スレッドの最大数を設定します。このプロパティは永続プロセスに適用され、アプリケーション・サーバーの構成に依存しています。
ドメインのパフォーマンスおよびスケーラビリティを向上させるには、これが最も簡単な方法です。Oracle BPEL Serverでは、MDBスレッドを使用してOracle BPEL Serverメッセージが処理されます。このプロパティの最大値は、Oracle BPEL ServerのMDB J2EEリスナー・スレッドの設定によって変化します。Oracle Application Serverでは、この数はorion-ejb-jar.xml
デプロイメント・ディスクリプタ・ファイルで設定します。
たとえば、MDB J2EEリスナー・スレッドの総数が120
である場合、dspMaxThreadsの値は120
以下に設定できます。複数のドメインを構成している場合、すべてのドメインに対するdspMaxThreads設定の合計が、MDB J2EEリスナー・スレッドの設定を超えないようにしてください。
アプリケーション・サーバーおよびデータベース・ホストのCPU使用率が処理能力を大きく下回っている場合、必要に応じて、この値とMDB J2EEリスナー・スレッドの設定を大きくしてください。それでもCPUが十分に使用されない場合は、複数のOracle BPEL Serverインスタンスの実行を検討します。
デフォルト値は100
スレッドです。
このプロパティは、負荷がピークに達している期間中にメッセージを処理するアクティブ・ディスパッチャ・スレッドの最小数を設定します。
現在のアクティブ・スレッドの数がこの値を下回る場合、新しいスレッドを割り当てるかどうかを決定するときに負荷率は考慮されません。
このプロセスは、永続プロセスに適用されます。
デフォルト値は5
スレッドです。
このプロパティは、waitアクティビティ、またはpickアクティビティのonAlarmブランチにおける期限切れコールの最大数を設定します。期限切れコールの再試行がこの回数を超えると、失敗となります。
期限切れコールのターゲットであるアクティビティやインスタンスが見つからない場合、コールは再スケジュールされます。
期限切れコールによる最初(オリジナル)の試行は、再試行の回数には含まれません。
このプロセスは、永続プロセスに適用されます。
デフォルト値は5
です。
このプロパティは、多重呼出し不変なサービスによりアクティビティが正常終了されるまでの、最大時間(秒単位)を設定します。この時間が経過しても多重呼出し不変なサービスが完了しない場合、このサービスは多重呼出し不変でないとみなされ、現在のトランザクションがデータベースにコミットされます。これにより、多重呼出し不変チェーン内で別のサービスが失敗した場合に、時間のかかるサービスが再実行されるのを防ぐことができます。
デフォルト値は30
秒です。
このプロパティは、インスタンスIDの範囲のサイズを制御します。Oracle BPEL Serverでは、この値を使用して、インスタンス・キー(プロセス・インスタンスIDの範囲)がバッチで作成されます。このメモリー内IDの範囲を作成すると、その次の範囲は更新され、ci_id_range
表に保存されます。たとえば、instanceKeyBlockSizeを100
に設定すると、Oracle BPEL Serverはメモリー内にインスタンス・キーの範囲を作成します(100個のキー。これは後に、cikey
としてcube_instance
表に挿入される)。ブロック・サイズがci_id_range
表に対する更新の数よりも小さい場合、パフォーマンスの問題が発生する可能性があります。
デフォルト値は10000
です。
このプロパティは、プルーニング前にキャッシュ可能な進行中インスタンスの最大数を設定します。最大値に到達すると、最小値(instCacheLowWatermarkプロパティで設定)になるまでキャッシュから古いインスタンスが削除(プルーニング)されます。プルーニングされたインスタンスは、必要に応じて、デハイドレーション・ストアから取得できます。このプロパティは、永続プロセスに適用されます。
この値は、instCachePolicyプロパティがlru
またはhybrid
に設定されている場合のみ使用されます。このプロパティを設定する場合は、次の点を考慮してください。
システムを通じてインスタンスを1つ実行し、この実行に応じて増加したメモリー使用率を測定できます。
このプロパティの設定値が大きすぎる場合、OutOfMemoryException
エラー・メッセージが表示されます。また、この値が大きすぎると、ガベージ・コレクタがより頻繁に実行されるようになるため、実際にシステムは遅くなります。ガベージ・コレクタを監視するには、Sun社のビジュアル・ガベージ・コレクション(GC)ツール(http://java.sun.com/performance/jvmstat)を使用します。
デフォルト値は3000
です。0は制限がないことを表します。
このプロパティは、プルーニングの際にキャッシュに残す進行中インスタンスの数を設定します。このプロパティは、永続プロセスに適用されます。
キャッシュ内でインスタンスの数が最大値に達すると、このレベルになるまでキャッシュ内のインスタンスが削除されます。
キャッシュのプルーニングは、キャッシュ・サイズが最大値(instCacheHighWatermarkプロパティで設定)に達したときに行われます。このinstCacheLowWatermarkプロパティは、プルーニングの実行率を制御します。デフォルトは最大値の75%です。これは、プルーニング時に、キャッシュが最大値の75%に削減されることを表します。この値は、instCachePolicyプロパティがlru
またはhybrid
に設定されている場合のみ使用されます。
インスタンス・キャッシュの統計を監視するには、Oracle BPEL Controlの「BPELドメインの管理」→「スレッド」に移動します。このページの下部にある「サーバー・キャッシュ統計」セクションには、「インスタンス・キャッシュ」というエントリがあります。ここにはキャッシュ・サイズとヒット率が表示されます。ヒット率がきわめて低い場合は、キャッシュ・サイズ、または最小値を大きくすることを検討してください。
このプロパティの設定値が大きすぎる場合、OutOfMemoryException
エラーが表示されます。また、この値が大きすぎると、実際にシステムは遅くなります。これは、ガベージ・コレクタをより頻繁に実行しなければならないためです。ガベージ・コレクタを監視するには、Sun社のビジュアルGCツール(http://java.sun.com/performance/jvmstat)を使用します。
デフォルト値は2250
(75%)です。
このプロパティは、キャッシュから進行中のインスタンスを削除するときに使用される追出しポリシーを設定します。このプロパティは、永続プロセスに適用されます。
このプロパティは、optCacheOnプロパティがtrue
に設定されている場合のみ有効です。
キャッシュ管理を微調整する必要がある場合は、このプロパティを使用します。メモリーに保存する必要のあるプロセス・インスタンスの数がわかっている場合には、lru
設定の使用をお薦めします。lru
設定を使用する場合、instCacheHighWatermarkプロパティおよびinstCacheLowWatermarkプロパティも設定する必要があります。
このプロパティの値を次に示します。
lru
: 最低使用頻度。この設定では、最も長期間アクセスされていないインスタンスから順に削除されます。これは推奨される設定です。
auto
(デフォルト): 削除の判断をJVMに委任します。インスタンスは、ガベージ・コレクタがソフト参照を取得したときに削除されます。
soft-lru
: lru
とauto
との組合せです。
このプロパティは、インボーカ・キューの接続プールの最小サイズを設定します。この値は、インボーカ・スレッド数と同じである必要があります。インボーカ・スレッドが200
に設定されている場合、このプロパティの値を200
に設定することでJMSのウォーミング・アップを回避できます。
このプロパティは、永続プロセスおよび一時プロセスの両方に適用されます。
デフォルト値は25
です。
このプロパティは、大きなXML文書の永続性しきい値を設定します。これはBPEL変数の最大サイズ(KB単位)です。この値を超えた場合、残りのインスタンスのスコープ・データとは別の場所に保存されます。
このプロパティは、永続プロセスおよび一時プロセスの両方に適用されます。
インスタンスの処理が実行されるたびにXML文書を読み書きしている場合、大きなXML文書はOracle BPEL Server全体のパフォーマンスに影響を与えます。
デフォルト値は50
KBです。
このプロパティは、BPELアクティビティの最小待機時間を設定します。
waitアクティビティの待機時間、またはpickアクティビティのonAlarmブランチの待機時間がここで定義された値よりも短い場合、待機は無視されます。
このプロパティは、永続プロセスに適用されます。
デフォルト値は2
秒です。
このプロパティは、進行中インスタンスのメモリー内キャッシュを設定します。このプロパティは、永続プロセスに適用されます。
true
に設定した場合、Oracle BPEL Process Managerではデータベースは検索されず、メモリー内のキャッシュからアクティブ・インスタンスのロードが試行されます。最適化を無効にするには、true
以外の値を指定します。
プロセスの実行時間が長く、サブプロセスはすぐにコール・バックしない場合、このプロパティをfalse
に設定します。多くのコール・バックが予想される、比較的短めのプロセスを処理している場合には、こちらを検討してください。
このプロパティをtrue
に設定した場合、次のようなキャッシュ関連の設定が必要です。
キャッシュを使用しなくても、パフォーマンスの目標を達成できる場合は、管理やチューニングを簡略化するために、この設定をfalse
のままにしておくことをお薦めします。
このプロパティの値を次に示します。
true
: Oracle BPEL Serverではデータベースは検索されず、メモリー内のキャッシュからアクティブ・インスタンスのロードが試行されます。
false
(デフォルト): Oracle BPEL Serverでは毎回、データベースからインスタンスがロードされます。このプロパティは、多重呼出し不変なサービスのルーティング・ショートカットを設定します。
true
に設定すると、アクティビティ・サービスが多重呼出し不変である場合に、Oracle BPEL Serverでは同一のトランザクション内でできるだけ多くのアクティビティの処理が試行されます。
このプロパティは、永続プロセスに適用されます。
デフォルト値はtrue
です。最適化を無効にするには、true
以外の値を指定します。
デフォルト値はtrue
です。
このプロパティは、ローカルSOAPリクエストのショートカットを設定します。
ローカルSOAPコールは、通常、SOAPスタック経由でメッセージを送信するのではなく、内部コールを使用して実行されます。
デフォルトでは、Oracle BPEL Process Managerは、SOAPスタックを無視してすべてを最適化します。最適化を無効にするには、true
以外の値を指定します。
このプロパティは、永続プロセスおよび一時プロセスの両方に適用されます。
このプロパティは、Oracle BPEL Serverで最後にBPELアーカイブがチェックされてから、次にチェックされるまでの待ち時間を秒数で指定します。チェックするというのは、BPELアーカイブで、特定プロセスの最終変更時間のタイムスタンプを確認するという意味です。最後のチェックの後、指定された秒数が経過し、BPELアーカイブ・ファイルが変更されている場合、プロセスは新しいアーカイブからリフレッシュされます。失効チェックが最後に実行されてから十分な時間が経過していない場合は、現在ロードされているプロセス・クラスが使用されます。
このプロパティは、永続プロセスおよび一時プロセスの両方に適用されます。
プロセスのチェックを無効化するには、値に-1
を指定します。この場合、Oracle BPEL Serverでは、プロセスがロードされても、同じプロセスの新しいバージョンがデプロイされているかどうかのチェックは行われません。
デフォルト値は1
秒です。
このプロパティを使用すると、『Business Process Execution Language for Web Services Specification Version 1.1』における割当てルールの施行を緩和できます。true
に設定されている場合、Oracle BPEL Process Managerでは、BPEL変数の割当て時にルールが適用されません。たとえば、BPEL仕様で許可されていないNULL割当てに関するエラーが表示されません。
このプロパティは、永続プロセスおよび一時プロセスの両方に適用されます。
このプロパティの値を次に示します。
このプロパティは、アクティビティを正常終了するためにサービスが使用できる最大時間(秒単位)を設定します。この時間が経過してもサービスが完了しない場合、このサービスは遅いとみなされます。Oracle BPEL Process Managerでは、遅いサービスに関する統計が収集されます。
このプロパティは、永続プロセスに適用されます。
デフォルト値は1
秒です。
このプロパティは、最後に処理されたリクエストのリストのサイズを設定します。リクエストが終了するごとに、このリクエストに関する統計がリストに保存されます。値が0以下の場合、統計の収集は行われません。
このプロパティは、永続プロセスおよび一時プロセスの両方に適用されます。
統計は、Oracle BPEL Controlの「BPELドメインの管理」→「統計」に表示されます。
デフォルト値は1000
です。
このプロパティは、プロセス結果の受信側が結果が戻るまで待機する、最大時間を設定します。非同期BPELプロセスの結果は、Oracle BPEL Serverの結果を待機する受信側により、同期的に取得されます。
このプロパティは、一時プロセスに適用されます。
デフォルト値は45
秒です。
このプロパティはドメインのトランザクション・データソースのJNDI名を設定します。JTAのサポートには、このデータソースの構成が必要です。
このプロパティは、永続プロセスおよび一時プロセスの両方に適用されます。
デフォルト値はjdbc/BPELServerDataSource
です。
このプロパティは、Universal Description, Discovery, and Integration(UDDI)バージョン3に準拠するレジストリの問合せURLを指定します。
仮想の場所を使用している場合、つまりパートナ・リンクで抽象WSDLのみを参照し、パートナ・リンクのバインディング・レベルでデプロイメント・ディスクリプタにregistryServiceKey
という名前のプロパティを設定している場合は、このプロパティを使用してUDDIレジストリに接続し、情報を取得します。
デフォルト値はありません。
このプロパティは、受信XML文書、および送信XML文書を検証します。
true
に設定されている場合、Oracle BPEL Process Managerでは、受信および送信XML文書に対してスキーマ検証が行われます。
このプロパティは、永続プロセスおよび一時プロセスの両方に適用されます。
デフォルト値はfalse
です。
このプロパティは、ワーカー・キューの接続プールの最小サイズを設定します。この値は、ワーカー・スレッド数と同じである必要があります。ワーカー・スレッド数が200
に設定されている場合、この値を200
に設定することでJMSのウォーミング・アップを回避できます。
このプロパティは、永続プロセスに適用されます。
デフォルト値は25
です。
この項で説明するパラメータは、Oracle Application Serverレベルで設定されます。これらのパラメータを有効にするには、OC4Jインスタンスを再起動する必要があります。
この項には、次の項目が含まれています。
Oracle BPEL Serverでは、原子性を達成するためにJTAが使用されます。トランザクション・タイムアウトの値は、transaction-manager.xml
ファイルにデフォルトで60000
ミリ秒と設定されています。このファイルの場所は、Oracle BPEL Process Managerをインストールした方法により異なります。
SOA_Oracle_Home
¥j2ee¥home¥config
にあります。
SOA_Oracle_Home
¥bpel¥system¥appserver¥oc4j¥j2ee¥home¥config
にあります。
特にOracle BPEL Serverに負荷がかかっている場合は、タイムアウトにより、トランザクション・ロールバック・エラーが発生することがあります。タイムアウトの原因には、次のようなものが考えられます。
プロセスに応じて、この値を変更します。次の例では、タイムアウトを120秒に設定しています。
<transaction-config timeout="120000" />
プロセスによるパートナの呼出しに、指定したタイムアウトしきい値よりも長い時間がかかる場合、一方向リクエストを使用して呼び出すか、bpel.xml
デプロイメント・ディスクリプタ・ファイルでnonBlockingInvoke
パートナ・リンク・プロパティをtrue
に設定します。
パフォーマンスを改善するには、すべてのOracle BPEL ServerのEJBに対するmax-instances
属性をorion-ejb-jar.xml
ファイルから削除することをお薦めします。Oracle BPEL Process Manager for OracleAS Middle Tierインストール・タイプの場合、このファイルはSOA_Oracle_Home
¥j2ee¥home¥application-deployments¥orabpel¥ejb_ob_engine
にあります。
これにより、アプリケーション・サーバーでは、さらに多くのリソースを利用率の高いBeanに割り当てられるようになります。
Oracle BPEL Serverでは、WorkerBean
と呼ばれるMDBを使用して処理が行われます。したがって、このMDBに十分なスレッドを割り当てることが重要です。不足している場合、リソースの使用率は最適化されません。orion-ejb-jar.xml
ファイルの次のコードは、70
スレッドを割り当てています。
<message-driven-deployment name="WorkerBean" destination-location="jms/collaxa/BPELWorkerQueue" connection-factory-location="jms/collaxa/BPELWorkerQueueFactory" listener-threads="70" min-instances="100"> <ejb-ref-mapping name="ejb/local/DispatcherLocalBean" /> .. .. </message-driven-deployment>
インボーカBeanは、ブロックしていないinvokeアクティビティでのみ使用されます。一部の呼出しをブロックせずに行う場合、InvokerBean
に割り当てられるスレッドの数を増やします。orion-ejb-jar.xml
にある次のコードは、30
スレッドを割り当てています。
<message-driven-deployment name="InvokerBean" destination-location="jms/collaxa/BPELInvokerQueue" connection-factory-location="jms/collaxa/BPELInvokerQueueFactory" listener-threads="30" min-instances="100"> <ejb-ref-mapping name="ejb/local/ProcessManagerLocalBean" /> </message-driven-deployment>
Oracle BPEL Serverでは、アプリケーション・サーバーのJTAデータソースを使用して、データベース接続が取得されます。デフォルトで、Oracle BPEL ServerはOracle Database Liteのデハイドレーション・ストアを使用するよう構成されています。ストレス・テストおよび本番環境については、Oracle Database 10gの使用をお薦めします。Oracle Database Liteは、開発初心者の負担を緩和するためにデフォルトのインストールにパッケージされています。
Oracle BPEL Serverのデータソース・エントリを構成する場合は、次の点に注意してください。Oracle BPEL Process Manager for OracleAS Middle Tierインストール・タイプの場合、このデータソース・エントリはSOA_Oracle_Home
¥j2ee¥home¥config¥data-sources.xml
ファイルにあります。
max-connections
の値と比較します。デフォルトのmax-connections
値は無制限です。
データベース永続性が有効な場合、num-cached-statements
属性を使用してJDBC文キャッシュを有効にすると、通常はOracle BPEL Serverのパフォーマンスが向上します。文キャッシュにより、カーソルを繰返し作成したり、文を繰り返し解析および作成することに起因するオーバーヘッドが軽減します。また文キャッシュにより、アプリケーション・サーバーとデータベース・サーバー間の通信オーバーヘッドも低下します。
関連項目
|
JVMパラメータは、Oracle BPEL Serverのパフォーマンスに影響を与える場合があります。パフォーマンスに影響を与える主な要因は、ヒープ・サイズに関係します。ヒープ・サイズはJVMで使用するメモリー量を制御します。BPELプロセス・インスタンスが専用のホストで稼動している場合、ヒープ・サイズはなるべく大きな値に設定します。
もう1つの重要なヒープ構成は、ガベージ・コレクタの世代の設定です。ガベージ・コレクタは、オブジェクトを存在期間の長さによって分類することにより、コレクションを最適化します。Oracle BPEL Serverオブジェクトのほとんどは短期的なものであり、Edenスペースで存続します。Edenスペースのサイズは総ヒープ・サイズの60〜70%にすることをお薦めします。
JVMの-Xmn
起動オプションは、Edenスペースのサイズを、値を明示して設定します。このオプションを設定するには、次の手順を実行します。
JVMコマンドライン・オプションを変更する手順は次のとおりです。
Oracle BPEL Serverのパフォーマンスは、デハイドレーション・ストアの容量と関係しています。次の処理が推奨されます。
表7-3のデータベース・パラメータは、Oracle BPEL Process Managerのパフォーマンスに影響を与えます。使用する値は、ハードウェア構成により異なります。
パラメータ名 | 値の例 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
この章では、Oracle BPEL Process Managerのプロパティを設定し、プロセス、ドメイン、アプリケーション・サーバー、Java仮想マシン(JVM)、デハイドレーション・ストア・データベースなどのレベルでパフォーマンスを最適化する方法について説明しました。この章では、これらのプロパティ設定および推奨される使用方法について説明しています。
|
![]() Copyright © 2001, 2008, Oracle. All Rights Reserved. |
|