Jump to content 日本-日本語

製品  >  ソフトウェア  >  HP- UX Developer Edge  

巨大J2EEシステム、パフォーマンス・チューニングの舞台裏

HP-UX/Integrityサーバー お問い合せ
コンテンツに進む
巨大J2EEシステム、パフォーマンス・チューニングの舞台裏 巨大J2EEシステム、パフォーマンス・チューニングの舞台裏
巨大J2EEシステム、パフォーマンス・チューニングの舞台裏
ベンチマーク結果の裏側にあるもの
徹底したパーティショニング

徹底したパーティショニング


特集1の「J2EE運用の新しい常識、『パーティショニング』を検証する」でも解説したとおり、ハイエンドのJ2EEシステムにおいてパフォーマンス向上のカギを握るのは、パーティショニングである。今回のベンチマーク計測でも、上記の特集で説明したプロセッサー・セット(pset)およびCell Localに加えて、HPのハードウェア・パーティショニング技術「nPartitions (nPars)」が活用されている。nParsは、サーバ上の複数のCPUやメモリをハードウェア・レベルで分離し、それぞれで独立したOSの運用を可能にするテクノロジーである。

図3は、SPECjAppServer2002のベンチマーク計測に使用されたシステムの構成図である。ここで、赤字で囲まれている部分が、計測対象であるHP Integrity Superdomeサーバだ。一方、同図の上部に示される4台のサーバは、「Driver」と呼ばれる負荷生成クライアントである。

図3:ベンチマーク計測におけるシステム構成
図3:ベンチマーク計測におけるシステム構成

Superdomeの内部は、nParsによるハードウェア・パーティショニングによって、3つのアプリケーション・サーバ(BEA WebLogic Server)と1つのデータベース・サーバ(Oracle9i)に分割されている。Superdomeが装備する48個のItanium 2プロセッサーのうち、28個をデータベース・サーバにあて、残る20個を3つのアプリケーション・サーバそれぞれに振り分けた構成だ。


psetとCell Localの適用


nParsによって大きく4つに分割されたCPUとメモリは、psetおよびCell Localによってさらに細かくパーティショニングされる。図4は、3つのアプリケーション・サーバそれぞれの内部におけるpsetとCell Localの設定を示した図である。

図4:psetとCell Localの適用
図4:psetとCell Localの適用

ここではまず、Cell Localを設定し、1つのセル上で動作するWebLogic Serverのプロセスを2ないし3つに限定している。これにより、同プロセスはセル上のローカル・メモリだけを利用することになり、セル間通信にともなう遅延の影響を受けずに済む。

また、各セルに備わる4つのCPUを分割し、2 CPUからなる2つのpsetを構成、それぞれの上で個別のWebLogic Serverプロセスを動作させている。その結果、例えば1つのEntity Beanにアクセスが集中するような状況でも、キャッシュ・コヒーレンシー維持にともなうスケーラビリティ低下を免れるのである。

以上のように、Superdomeが有するハードウェア・リソースの能力を効率よく引き出すべく、幾重ものパーティショニングが導入されていることがわかる。


自社開発のJVMとチューニング・ツールの効果


HP+BEAの組み合わせによる高パフォーマンスのもうひとつの理由として、「自社開発のJVMとチューニング・ツール」を効果的に利用している点が挙げられる。上述のSuperdomeでは、WebLogic Serverの実行環境としてHPが開発した「HP JVM」が用いられており、それがベンチマーク結果を押し上げる大きな要因となっているのだ。

HPでは以前より、HP-UXプラットフォームおよびItaniumプロセッサー・ファミリに対応するJVMを自社で開発し提供している。そのベースはサンからライセンス提供を受けたHotSpot VMであるが、特に過去6年以上にわたって続けられてきたEPICアーキテクチャ向けの最適化により、Itanium 2プロセッサーの能力を引き出すことに成功しているという。

また興味深い点は、HP JVMが独自の「拡張プロファイリング機能」を内蔵し、その収集データを解析するためのツール「HPjmeter」と「HPjtune」も合わせて提供していることである。この拡張プロファイリング機能は、標準のJVMのそれに比べ、より詳細なログを収集できる。さらに、プロファイリングにともなうオーバーヘッドが低いため、よりプロダクション環境に近い状態でのシステム・パフォーマンスを掴めるのが特長だ。

HP JVMとHPjmeterによるプロファイリングの例を紹介しよう。HP JVMでは、実行時にオプション「-Xeprof」を指定することで、上述した拡張プロファイリング機能を動作させることができる。図5は、SPECjAppServer2002の実行時に同機能によるプロファイリングを実施し、その結果をHPjmeterにて解析している例である。ここでは、Session Bean「OrderSes」における新規の受注処理(メソッドnewOrder)、およびEntity Bean「OrderEnt」のデータベース保存において、CPU時間の多くを費やすことが示されている。つまり、この2つのEJBコンポーネントが、同ベンチマークにおけるチューニングのポイントなのである。こうした作業によって、個々のアプリケーション・サーバやデータベース・サーバのどの部分に多くのリソースを配分すればよいか、またJVMのヒープサイズ等をどのようにチューニングすればよいかが明らかになる。

図5:HPjmeterによる負荷集中部分のプロファイリング
図5:HPjmeterによる負荷集中部分のプロファイリング

スレッド挙動をOSレベルで詳細にモニタリング


Superdomeのチューニングに際しては、HP JVMのもう一つのユニークな能力が活用されている。それは、Javaスレッドの挙動をOSのスレッドのレベルで子細にトレースできる機能である。

同機能は、具体的には次のように利用する。HP JVMによりJavaアプリケーションが動作している最中に、その実行プロセスに対しSIGQUITシグナルを送る。すると、Javaアプリケーションの動作は継続したまま、その時点での各スレッドについて以下のようなスタックトレースが表示される。

"Thread-0" prio=9 tid=0x1bad30 nid=61 lwp_id=12190 waiting for monitor entry [0x67642000..0x67642478 ]
   at MsgThread.rest(ObjectWaiterApp.java:203)
   -waiting to lock <0x6bcc0978>(a java.lang.Class)
   at MsgThread.run(ObjectWaiterApp.java:222)

ここで、1行目のヘッダ部分は、以下のような意味を表している。

ヘッダ 内容
"Thread-0" Javaスレッド名
prio=9 JVM内部のスレッドの優先順位
tid=0x1bad30 Javaスレッドに対応するC++オブジェクトのポインタ
nid=61 Javaスレッドに対応するpthreadのID
lwp_id=12190 Javaスレッドに対応するカーネル・スレッドのID
waiting for monitor entry スレッドの状態を表す(waiting for monitor entry=ロック解放待ち/waiting on monitor=スリープ中/runnable=実行中)
[0x67642000..0x67642478 ] Javaスレッドのスタック領域

このように、個々のJavaスレッドについて、それがOS上のどのユーザ・スレッド(pthread)に対応し、またどのカーネル・スレッドに対応するかが容易に把握できる。よって例えば、上記のようなロック競合状態にあるスレッドが多く存在する場合、OSのプロセス管理ツールによる調査を並行して行えば、それがシステム全体にどのような影響を与えているのかを正確に追跡可能なのである。こうしたチューニング方法を選択できる点は、OSとJVM、そして関連するツールのすべてを自社開発するHPの強みといえるだろう。

以上、ここでは、SPECjAppServer2002でトップの成績を達成したSuperdomeを題材にして、そこで用いられたパフォーマンス・チューニング技法をいくつか紹介した。いずれも、小規模なJavaアプリケーションやLinuxベースのシステムではあまりお目にかかれない、ミッション・クリティカルなJ2EEシステムに特有のチューニングのノウハウといえるだろう。


関連リンク

 
HP-UXのBEAへの取り組み
  HPのアダプティブ・エンタープライズを実現するパートナーとして、BEAと強力なリレーションシップを締結して実現していきます。
BEA WebLogic環境の設定/移行ガイド
  WebLogic 環境の構築手順について説明します。
SPECjAppServer2002
  リアルタイムなレスポンスが要求される基幹業務システムに、Java™アプリケーション・サーバが使えるだろうか−ご心配ありません。HP Integrityサーバなら、4496.28TOPSという世界最速の実行環境を提供できます。
HPjmeter
  HPjmeter はプロファイリングデータのグラフィカル表示によって、パフォーマンスのボトルネックの検出の補助を行う、プラットフォーム非依存のJavaアプリケーションツールです。
HPjmeter ガイド
  このサイトは、HPのJava™パフォーマンス解析ツール、HPjmeterを知っていただくためのサイトです。HPjmeterの豊富な機能の使用法について詳細な手順をご紹介します。
HPjtune
  HPjtune はガベージコレクションの実行データをグラフ表示することにより、ガベージクレクションのパフォーマンス分析をサポートします。
 
最初に戻る 戻る  

その他のコラム(特集)もお読み下さい

 
 

本ページの内容は執筆時の情報に基づいており、異なる場合があります。
印刷用画面へ
プライバシー ご利用条件・免責事項