Jump to content 日本-日本語

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

J2EEパフォーマンス・チューニングの“虎の巻”・後編

HP-UX/Integrityサーバー お問い合せ
コンテンツに進む
J2EEパフォーマンス・チューニングの“虎の巻”・後編
J2EEパフォーマンス・チューニングの“虎の巻”・後編
Glanceを活用しよう
HPjmeterによるJavaプロファイリング

HPjmeterによるJavaプロファイリング

コア氏は、J2EEアプリケーションのスケーラビリティを左右する主要な要素として、「アプリケーションにJavaプロファイリングの目的は、もっともリソースを多く消費しているメソッドやスレッドを見つけ出すこと。具体的には、メソッド呼び出し回数やCPU時間、オブジェクト生成数に着目する。さらにコア氏は、「Javaアプリケーションのスケーラビリティを左右する要素として、スレッド間のロック競合の頻度もおさえておくべきポイントだ」と述べる。

HPでは、こうしたJavaプロファイリングを支援するGUIツール「HPjmeter」を無償で提供している。HPjmeterは、Javaプロファイリングの標準インタフェースであるJVMPIに準拠しており、ベンダー各社のJVMの-Xrunhprofオプションによるプロファイリング結果を読み込み、上述したポイントについてグラフィカルに解析結果を表示できる。

 
図4:HPjmeterによるJavaプロファイリング例
図4:HPjmeterによるJavaプロファイリング例
   
 

図4は、HPjmeterによるJavaプロファイリング結果の表示例である。この例ではJavaアプリケーションのスレッド一覧が表示されており、個々のスレッドについて実行時間の内訳を確認できる(手前の円グラフ)。円グラフを見れば、「webQueue」と呼ばれるメッセージ・キューのスレッドでは、処理時間の15%がロック競合に費やされていることが分かる。

さらにHPjmeterを使えば、オブジェクト・リテンションの発生を防ぐこともできる。オブジェクト・リテンションとは、プログラマーの意図せぬところでオブジェクト間の参照が残留し、不要なオブジェクトが解放されないままメモリを浪費する現象である。一種のメモリ・リークととらえることもできるだろう。HPjmeterは、「大量のオブジェクトへの参照を保持するデータ構造をヒューリスティック(発見的)に探し出し、オブジェクト・リテンションと疑わしき部分をアドバイスしてくれる」(コア氏)。


HP JVMの-Xeprofオプション

周知のとおり、JavaプロファイリングはJVMにとっては負担のかかる処理である。-Xrunhprofオプションを指定するとJavaアプリケーションの動作スピードは格段に低下するため、開発環境でしか実施できないのが難点だ。

これに対しHP JVMでは、標準の-Xrunhprofに加えて、-Xeprofオプションによる拡張プロファイリングをサポートしている。この拡張プロファイリング機能はオーバーヘッドがきわめて低く、プロダクション環境に近い負荷状況におけるJavaアプリケーションの挙動を正確につかめるのが特徴だ。またプロファイリングのオン/オフをJavaアプリケーションの動作中に切り替えできる。例えば、以下のようなオプション指定が可能だ。

-Xeprof:time_on=sigusr1,time_slice=sigusr2

ここで、「time_on」および「time_slice」では、プロファイリングの開始と終了を指示するためのシグナルとして「sigusr1」と「sigusr2」を設定している。よって、Javaアプリケーションの実行中にこれらのシグナルを送信すれば、例えば実際にトラブルが発生しているプロダクション環境において、リアルタイムにプロファイリングを実施することもできるだろう。

以下の表は、Javaパフォーマンス・チューニングで活用できるツールやJVMオプションについて、コア氏がまとめた一覧である。

表:Javaパフォーマンス・チューニング技法一覧

作業内容

使用するツールやJVMオプション

アプリケーションのボトルネックの解析 Glance(システム全体、プロセス単位、スレッド単位のCPU利用率を計測)
HPjmeter(スレッドヒストグラム、メソッドコールグラフ、スレッド詳細を解析)
-Xeprofオプション(HP JVM拡張プロファイリング)/-Xrunhprofオプション(プロファイリング)
SIGQUITシグナル(スタックトレースを解析)
gdb(スレッド単位のデバッグ)
ProspectおよびCaliper(HP-UX対応システム・プロファイラ)
OpenView Java Diagnostics
Javaヒープのリアルタイム・モニタリング VisualGC(サンが提供するGC可視化ツール)
OpenView Java Diagnostics
Javaメモリ管理やガーベジ・コレクションの詳細解析 HPjtune
-Xverbosegcオプション
-Xloggcオプション
Javaヒープのリアルタイム・モニタリング VisualGC(サンが提供するGC可視化ツール)
OpenView Java Diagnostics
オブジェクト・リテンションの原因究明 -XX:+HeapDumpオプション(ヒープダンプ取得)
HPjmeter(ヒープダンプ解析)
-Xrunhprofオプション
OpenView Java Diagnostics(メモリ・リーク解析)
gdb(ヒープ内容解析)
例外発生場所の解析 HPjmeter(例外発生解析)
-Xeprofオプション
OpenView Java Diagnostics(例外発生解析)

以上、今回はJavaOne Tokyo 2005におけるジョセフ・コア氏のセッション内容をもとに、J2EEパフォーマンス・チューニングの各種技法を紹介した。ここで見てきたとおり、Javaアプリケーションの性能向上のコツは、「複数のツールを利用して多角的なチューニング・アプローチを採用する」と要約できるだろう。ひとつのアプローチだけで済ませてしまわず、トランザクション・レベルからシステム・レベルまで、いくつかの視点からITシステムの性能を解析する。こうした手間を惜しまない“急がば回れ”の方法論を実践していけば、原因不明のパフォーマンス低下に足元をすくわれることもないはずだ。
トップへ 戻る    


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

 
 

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