WebLogic Real Time 1.0 "Trader" アプリケーションのパフォーマンス分析
Pages: 1, 2, 3

Traderサンプルの詳細な説明

Traderサンプルは、サーバサイドのJ2EE MDBとの間でリクエスト/応答形式のJMSメッセージングを実行するマルチスレッド Jythonクライアントで構成されます。適用可能な場合、Java Spring Frameworkを利用しています。サーバサイドのコードは、株価キャッシュ、株価更新サービス、株価照会サービス、株式注文サービスを実装します。サンプルに含まれるベンチマークフレームワークは、 Grinder Java Load Testing Framework(Java負荷テストフレームワーク)です。さらに、ベンチマーク出力およびJVMの冗長GCログからの出力を解析し、グラフ化するプログラムが含まれています。

コンポーネント

機能

FixMLフォーマットのメッセージ

リクエストおよび応答は、 FixML 4.4 schemaを使用して XMLBeans形式にエンコードされたJMSテキストメッセージです。

株価キャッシュ

継続的に更新される株価データの、サーバサイドのインメモリキャッシュ。

株価更新サービス

株価キャッシュの更新は、外部のデータフィードによって行われることを前提とします。このフィードは株価キャッシュを更新するMDBによってエミュレートされます。

ベンチマークではこのフィードを エミュレートせず、事前に生成される株価キャッシュを代わりに使用します。

株価照会サービス

非トランザクション型MDB。非永続的な株価照会リクエストを受信し、インメモリの株価キャッシュを検索し、リクエスト元が指定した返信送り先に非永続的な応答を返送します。

注文サービス

トランザクション型MDB。1回のトランザクションは、永続的な注文リクエストメッセージを受信し、(Spring DAOを介して)データベースにリクエストのレコードを挿入し、リクエスト元が指定した返信送り先に非永続的な応答を返送する一連の処理で構成されます。

ベンチマークでは、 エミュレートされたリソースマネージャを使用してデータベースをエミュレートします。

クライアントの株価照会リクエスト/応答

Jythonベンチマーククライアントは、同期的な株価照会リクエストを実行します。クライアントは株価照会サービスに、株価照会リクエストの非永 続的JMSメッセージを送信し、応答を受信するための一時キューを指定します。リクエストメッセージの送信後、非同期コンシューマを介して非永続的な応答 を受信するまで、クライアントはブロックします。非同期コンシューマは確認応答を呼び出しません(no-ACKモード)。

クライアントの注文リクエスト/応答

Jythonベンチマーククライアントは、同期的な注文リクエストも実行します。クライアントは注文サーバに、注文リクエストの永続的JMSメッ セージを送信し、応答を受信するための一時キューを指定します。リクエストメッセージの送信後、非同期コンシューマを介して非永続的な応答を受信するま で、クライアントはブロックします。非同期コンシューマは確認応答を呼び出しません(no-ACKモード)。

ベンチマークリクエスト

ベンチマークリクエストでは、まずクライアントの株価照会リクエスト/応答を4回連続で実行し、次にクライアントの注文リクエスト/応答を1回実行 します。ベンチマークフレームワークは、1つ以上のスレッド内でベンチマークリクエストを実行し、必要に応じて複数のクライアントJVMを使用します。

WLRTのTraderベンチマークの主な意図は、個々の株価照会リクエストおよび注文リクエストのレイテンシを測定することです。

Traderサンプルのチューニング

Traderサンプルに適用した以下のチューニングガイドラインの目的は、プログラミングのベストプラクティスへの準拠度を高め、スループットを向 上させ、レイテンシを低減し、ベンチマークの目的に合わせてサンプルを単純化することでした。これらのチューニングの組み合わせにより、スループットは 10倍超に向上し、レイテンシは90%以上減少し、ベンチマークを何時間実行しても安定した結果を得られるようになりました。

再利用のためのJMSリソース:キャッシュまたはプール

重量JMSオブジェクト(JMS接続、セッション、プロデューサ、コンシューマ、一時送り先)を1つ1つのメッセージに対して開いたり閉じたりする 代わりに、キャッシュして再利用するようにクライアントアプリケーションおよびサーバMDBのコードを改良しました。これは標準的なベストプラクティスで あり、安定的に低い応答時間を達成するために必要でした。

クライアント上でのDeterministic Garbage Collectionの使用

安定的に低い応答時間を達成するために、サーバJVMだけでなくクライアントJVM上でもDetGCオプションを使用する必要がありました。た だし、負荷の高い少数のクライアントが1台のマシン上で動作しているのではなく、(実際のアプリケーション環境で典型的なように)それほど負荷の高くない クライアントが多数のマシンに分散しているような環境では、クライアントでのDetGCの使用は必要ではない可能性もあります。

JMSメッセージパイプラインの最大サイズを「1」に制限

カスタムJMS接続ファクトリのチューニングでは、 MessagesMaximum属性を使用して、サーバとコンシューマの間の処理中メッセージのためのメッセージパイプラインのサイズを 1に制限しました。また、これらのカスタムファクトリを参照するようにMDBとクライアントの両方を変更しました。これはスループットよりもレイテンシを優先する設定であり、アプリケーションによっては応答時間が改善される可能性があります。

クライアントとサーバのスレッドプールサイズとMDB同時実行性のチューニング

MDBとクライアントの両方が、非同期メッセージ処理のために十分な数のスレッドを利用できることを保証するために、クライアントスレッドプールの スレッド保持数を32に増やし、株価照会Beanおよび注文Beanに32個の専用サーバスレッドを与えました。専用スレッドを利用するために、注文 Beanおよび株価照会Beanの両方について、MDB記述ファイルで max-beans-in-free-poolの値を32に設定しました。

サーバJVMメモリの制限

Javaヒープサイズの設定値が大きすぎると、確定的GCエンジンではGC処理の遅延時間が長くなり、さらに長いGC休止が発生する可能性があります。この問題は後のJRockitバージョンで解決されました。JRockit上で GCトリガの設定値を小さくする回避方法もありますが、Traderサンプルの目的のために、今回はその方法ではなくサーバJVM用に構成されるメモリ容量を256MBに制限することにしました。

データベースの代わりにエミュレートされたリソースマネージャを使用

ベンチマークの目的のために、データベースへの呼び出しを、 エミュレートされたXAリソースマネージャを利用する呼び出しに置き 換えました。これは、注文をデータベースに記録するレイテンシと、2フェーズトランザクションのオーバーヘッドをエミュレートします。またこれは、データ ベーステーブルの肥大化や、実行ごとにデータベースのパフォーマンスが一定しないという潜在的な問題にも対処します。

JRAプロファイル(JRockit Analyzerプロファイル)とWebLogic統計の検証

メモリリーク位置の特定に加えて、キャッシュされる必要があったリソースの位置を特定するために、次の3つのツールが非常に有効でした。

  • Runtime Analyzer(JRA) - JVM本体と、JVMが実行しているアプリケーションに関する詳細な記録を生成するオンデマンドの実行記録ツール。記録されたプロファイルはJRAアプリ ケーションを使用して、後でオフラインで分析することができます。記録されるデータには、ガベージコレクション統計、最適化に関する決定、オブジェクト統 計、メソッドとロックのプロファイリングなどがあります。
  • JMS、トランザクション、ストア永続性についてのWebLogic JMX統計。

実行中のベンチマークへの干渉回避

これらのベンチマークの意図は最大のレイテンシを測定することであるため、ベンチマークと関連のないプロセスが干渉しないことの保証は通常よりも重 要でした。そのようなプロセスの処理はスループットにはそれほど影響しないかもしれませんが、応答時間の測定には容易に干渉する可能性があります。そのた め、アクティブにログインしているユーザがいないこと、ウイルスチェッカが無効になっていること、などの保証に配慮しました。

ベンチマーク環境

ここでは、ベンチマーク環境の詳細を示します。

ハードウェアとオペレーティングシステム(マシン2台)

マシン1台のベンチマークでは、サーバとクライアントの両方をDell 6650上で実行しました。マシン2台のベンチマークでは、HP DL380上でサーバを、Dell 6650上でクライアントを実行しました。HP DL380はDell 6650よりずっと高速なディスクドライブを装備し、トランザクション型および永続的なメッセージングの処理を高速化しています。

  • Dell 6650
    • 4CPU Xeon 3.0 GHz
    • 8GBの使用可能RAM
    • オペレーティングシステム:Windows Server 2003 Enterprise Edition
  • HP DL380
    • 2CPU Xeon EM64T 3.6GHz(ハイパースレッディング、1MB L2 キャッシュ)
    • 3.5GBの使用可能RAM(4GBインストール済み)
    • 15000RPM 36GBディスクドライブ6基(バッテリバックアップキャッシュ付き)
    • 4つの論理ディスク、うち2つの論理ディスクは2つの物理ディスク上にストライピング
    • オペレーティングシステム:Windows Server 2003 Standard Edition
  • ネットワーク
    • 各マシンは高速スイッチを介して接続され、マシンからスイッチまでの接続は専用のギガビットEthernet接続。

ソフトウェアのバージョン

製品/ライブラリ

バージョン

BEA WebLogic Server

9.1

BEA JRockit JVM

5.0 R26

Sun JVM

1.5.0_04-b05

Spring

1.2.6

XMLBeans

1.0.3

Grinder

3.0-beta27

WebLogic Serverコンフィグレーションの概要

  • ファイルストア書き込みポリシー:直接書き込み(デフォルト)
  • JMS接続ファクトリ:すべてのJMSコンシューマに対してMessagesMaximum=1(デフォルトは10)
  • スレッディング:MDBを除きデフォルトのセルフチューニングモード
  • MDBについては64スレッドの専用実行キュー
  • 注文MDB:max-beans-in-free-pool = initial-beans-in-free-pool = 32
  • 株価照会MDB:max-beans-in-free-pool = initial-beans-in-free-pool = 32
  • JMSサーバに注文用のキューと株価照会用のキューを作成

JMSコンフィグレーション

JRockit JVM

クライアントオプション

-Xms128m -Xmx128m

-Dweblogic.ThreadPoolSize=32

サーバオプション

-Xms256m -Xmx256m

-Xverbose:opt,memory,memdbg,gcpause,compaction,license

Deterministic GCオプション

-Xgcprio:deterministic


Sun JVM

クライアントオプション

-Xms128m -Xmx128m

-Dweblogic.ThreadPoolSize=32

サーバオプション

-server

-Xms256m -Xmx256m

-XX:+UseSpinning

-verbose:gc

GC休止低減オプション

-Xincgc

Pages: 1, 2, 3

Next Page »