[SOA/BPM] Using BPEL Performance Statistics to Diagnose Performance Bottlenecks

原文はこちら。
https://blogs.oracle.com/ateamsoab2b/entry/using_bpel_performance_statistics_to

Oracle SOA 11gアプリケーションの性能チューニングは困難ではありますがやりがいのあるものです。SOAは、多くのアプリケーションやサービスと接続するコンポジットアプリケーションを構築するプラットフォームなので、全体の性能が悪い場合、ボトルネックはシステム中のどこか(SOAが接続するアプリケーションやサービス、インフラ、データベース、SOAサーバ自体)にあるわけです。迅速にボトルネックを識別する方法は、全体的な性能をチューニングする上で重要になります。

幸いにも、Oracle SOA 11gのBPELエンジン(ついでに言えば10gも)はBPELエンジンの性能統計情報を収集しています。この情報は低レベルのBPELエンジンのアクティビティのレイテンシを含んでいます。このBPELエンジンの性能統計情報を使うと、性能上のボトルネックを少し簡単に識別しやすくなります。

BPELエンジンの性能統計情報は常に利用できるのですが、これらの情報へのアクセスや解釈は、11gではいささか不明瞭です。

将来のバージョンでもっと素敵なユーザーエクスペリエンスを提供されるその前に、性能統計情報の利用、読み出し、解釈の手引きをこのエントリで提供したいと考えています。

Overview of BPEL Engine Performance Statistics

SOA SuiteのBPEL PMには性能統計情報を収集し、メモリ上に格納する機能があります。

StatLastNというMBean属性は、統計情報を格納するためのメモリバッファのサイズを設定します。このメモリバッファはMoving Window、つまり、データ量がバッファサイズを超えると、古い統計情報が新しい統計情報によって上書きされます。バッファサイズはStatLastNで制限されるので、統計情報収集が性能に及ぼす影響は軽微です。デフォルトはStatLastN=-1、つまり性能データを収集しません。

統計情報をメモリバッファに収集すると、統計情報はoracle.as.soainfra.bpel:Location=[Server Name],name=BPELEngine,type=BPELEngine というMBean経由で取得できます。

Oracle SOA開発に関わる友人は、簡単な"bpelstat" Webアプリケーションを作成しました。このアプリケーションは性能データをMBeanから検索、取得し、人間が読める形式で表示するものです。美しいUIではありませんが、かなり便利です。

Oracle SOA Suite 11.1.1.5以後では同じ統計情報をもっときれいなUIでご覧いただけます(Enterprise Managerで[SOAインフラストラクチャ]>[サービスエンジン]>[BPEL]>[統計])が、単純な考えを持つ人間からすれば、"bpeltest"のシンプルな感じが好きだったりします。簡単なJSPがいいのは、ページを保存したり、詳細分析をするために誰かに送ることができるからです。

以下は、BPELの統計情報表示のアプリケーションをインストールし、起動する方法の説明です。SOA開発部門の友人はまもなく統計情報の解釈に関するエントリを執筆する予定ですのでお楽しみに。

[訳注]
このbpeltestアプリケーションは、開発者モード(管理サーバーにすべての機能を載せてしまう)ではうまく動作しないようです。

Step 1: Enable BPEL Engine Statistics for Each SOA Servers via Enterprise Manager

まず、BPELエンジンの性能統計情報を収集するように、StatLastNに値を設定する必要があります。
  • Enterprise Mangaer Fusion Middleware Controlから、[soa-infra(サーバー名)] >[SOAインフラストラクチャ]>[SOA管理]>[BPELプロパティ]
  • [詳細BPEL構成プロパティ]をクリック
  • 属性"StatLastN"をクリックし、値を整数値で設定する。通常1000以上に指定

Step 2: Download and Deploy bpelstat.war File to Admin Server

[注意] WARファイルにはセキュリティを考慮していないJSPファイルが含まれています。セキュリティ上の危険があるため、長時間本番環境のサーバーに配置しないでください。データを収集したら無効化してください。
  • bpelstat.warをローカルPCにダウンロード
  • WebLogic管理コンソールで、[デプロイメント]>[インストール]
  • [ファイルのアップロード]をクリック
  • [ファイルを選択]ボタンをクリックして、管理サーバーにデプロイメントをアップロード
  • アップロード対象のファイルを選択していることを確認し、[次]をクリック
  • デフォルト[このデプロイメントをアプリケーションとしてインストールする]のまま[次]をクリック
  • ターゲットに "AdminServer" と指定
  • 残りのデプロイメントプロセスはすべてデフォルトを選択し、終了
  • 管理コンソールから[デプロイメント]へ移動
  • "bpelstat" アプリケーションの隣の箱をチェック
  • [起動]ボタンをクリック。アプリケーションの状態が[準備完了]から[アクティブ]に変わる

Step 3: Invoke the BPEL Statistic Tool

  • BPELStatツールはただBPELサーバのMBeanを呼び出し、メモリ上に蓄えられている性能統計情報を収集、表示するだけです。負荷のピークが過ぎた後に使いたいと思うのではないでしょうか。
  • http://<管理サーバーのホスト>:<管理サーバーのポート番号>/bpelstat にアクセス
  • 正しい管理サーバーのホスト名、ポート番号、ユーザー名、パスワードを入力
  • 性能統計情報を収集したいSOAサーバー名を入力する(例:SOA_MS1など)
  • [Submit]をクリック
  • すべてのSOAサーバーに対して同じように実行

Step 4: Interpret the BPEL Engine Statistics

bpeltestアプリケーションで数種類のカテゴリのBPEL統計情報を確認できるはずです。

まず、同期プロセスおよび非同期プロセスでグループ化されたBPELプロセスの全体的なレイテンシで始まります。さらに「リクエストのブレークダウン」と呼ばれる、BPELプロセスへのリクエストのライフタイムを通して測定結果をブレークダウンします。

1. 全体的なBPELプロセスのレイテンシ

ページの上部で表示しているのは、TestCompositeコンポジットから同期プロセスTestSyncBPELProcessを起動すると、実行の平均時間は平均1543.21ミリ秒なのに対し、TestComposite2コンポジットから非同期プロセスTestAsyncBPELProcessの実行時間は平均1765.43ミリ秒です。レイテンシの最大値と最小値も表示されました。

同期プロセスの統計

    
    
 

非同期プロセスの統計

    
    
 

2. リクエストのブレークダウン

同期/非同期プロセスによって分類される全体的なレイテンシの下で"リクエストブレークダウン"を実施します。統計キーによって編成されたリクエストブレークダウンは、BPELプロセスへのリクエストの生存時間を通してより細かい粒度の性能の統計情報を提供します。インデントを使い統計情報の階層を表示しています。

リクエストのブレークダウン
<statistics>
    <stats average="0.0" count="0" key="eng-composite-request" max="0" min="0">
        <stats average="258.43" count="277" key="eng-single-request" max="606" min="22">
            <stats average="0.0" count="248" key="populate-context" max="0" min="0"> 
...
SOA11.1.1.6では、リクエストブレークダウンの下の統計情報は統計キーに基づいて、すべてのBPELプロセスにわたって一緒に集計されることにご注意ください。つまりBPELプロセスを区別しないのです。 2つのBPELプロセスが同じ統計キーを共有する統計情報がある場合、2つのBPELプロセスからの統計情報が一緒に集約されます。この点を留意して、詳細を見ていきましょう。

2.1 BPELプロセスアクティビティのレイテンシ
リクエストブレークダウンにある非常に役立つ測定値は、BPELプロセスに組み込むBPELアクティビティ(Assign、Invoke、Receiveなど)の性能統計情報です。JSPページ上の測定値の名前は、BPELアクティビティに割り当てている名前に由来しています。これらの測定値は統計キー"actual-perform"にあります。

例1:
以下はBPELアクティビティ"AssignInvokeCreditProvider_Input"の測定値で、入力変数を呼び出し前に割り当てているBPELプロセス内のAssignアクティビティです。

  
  
  
  
  
  
 
[注意]以前述べたように、全てのBPELプロセス全体での統計情報は統計キーに基づいて集約されるため、もし2個のBPELプロセスが統計キーに基づいて集約された場合、2個のBPELプロセスがInvokeアクティビティに同じ名前を付けている場合、一つの測定値(つまり統計キー)で表示されるでしょう。

例2:
以下は"InvokeCreditProvider"と呼ばれるBPELアクティビティの測定値です。この呼び出しを終了するまでに平均で3.31ミリ秒かかっている(かなり速いですね)ことがわかるだけでなく、さらにブレークダウンしてこの3.31ミリ秒のうちほとんどはInvokeサービスに費やしていることがわかります。

  
  
  
    
    
  
  
  
  
  
  
  
  
  
  
  
 

2.2 BPELエンジンアクティビティのレイテンシ
リクエストブレークダウンの別の種類の測定値は、基礎となるシステムレベルのエンジンアクティビティのレイテンシです。これらのアクティビティは特定のBPELプロセスやプロセス中のアクティビティに直接関連しているわけではなく、全体的なBPELエンジンパフォーマンスに対する重要な要因です。これらのアクティビティには非同期リクエストをデータベースに保存する際のレイテンシやプロセスの出ハイドレーション時のレイテンシが含まれています。

友人のMalkit Bhasinが、自身のブログでBPELエンジンのアクティビティの統計情報を解釈する上で多くの情報を提供しようと現在作業中です。その情報が公開された時点でこのブログを更新する予定にしています。

(2012年10月2日)
Malkit BhasinがBPELサービスエンジンの統計情報に関する詳細分析を自身のブログで紹介しています。
Oracle BPEL Engine (SOA Suite) Diagnostics - Parsing low level request stats
http://malkit.blogspot.com/2012/09/oracle-bpel-engine-soa-suite.html

0 件のコメント:

コメントを投稿