Jump to content 日本-日本語

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

HPjmeter ガイド

HP-UX/Integrityサーバー お問い合せ
コンテンツに進む

パフォーマンス ボトルネックの検出


HPjmeterは、アプリケーションでパフォーマンス ボトルネックを検出するのに役立ちます。

ロック コンテンションの検出


スレッドが同期メソッドや同期ステートメントのロック取得を長時間待っている場合、Java?アプリケーションのボトルネックの一つとして、ロックコンテンションが高いことが挙げられます。ロック固有のプロファイルデータがなくても、HPjmeterでどのメソッドにロック コンテンションの問題があるかを予測できる場合があります。この機能を使用するには、[Guess]メニューから[Lock Contention]を選択します。すると、次のようなウィンドウが表示されます。
 
ロック コンテンションの検出   画面1
 
このダイアログは、HPjmeterがロック コンテンションの問題があると予測したパッケージ、クラス、メソッドの名前と、浪費されている時間(ミリ秒単位)を表示します。このウィンドウでは、メソッドに[Mark to Find]を設定して、たとえば[Call Graph Tree]で見つけられるようにできます。この例では、浪費している時間が2番目に長いメソッドは、CNdTimerクラスのresetTimerメソッドです。これは、呼び出し回数を減らすことができないか、そのメソッドを調査すべきであることを示しています。[Mark to Find]を設定し、下に示す[Call Graph Tree]でそのメソッドを探します。
 
ロック コンテンションの検出   画面2
 
このビューでは、どのメソッドがresetTimerメソッドを呼び出しているかを調べることができます。まず、このメソッドの呼び出し回数を減らして、ロック待ちで浪費する時間を短くすることを考えます。次に、もし可能であれば、このメソッドで同期処理を完全に取り除くことができないかどうか検討します。それが可能な場合、時間は浪費されなくなります。

注意: HPjmeterは、実行時間が予期したよりもずっと長いメソッドを目安として、ロックコンテンションの高い領域を検出します。これにはヒューリスティックなアルゴリズムが使われています。これは問題の可能性に対するヒントにすぎません。このツールが[Guess]メニューの下に配置されており、必ずしも完全に正確ではないということを示していることにご注意ください。

作成されたオブジェクトの参照


パフォーマンスに関する問題のもう一つの原因は、メモリに関わるものです。HPjmeterで、作成された各種類のオブジェクトの数を参照することができます。ここから、それぞれのオブジェクトが作成された場所についての情報を得ることができます。もし、ある種類のオブジェクトが予想よりもはるかに多く作成されていれば、問題の原因になっているメソッドをピンポイントで特定することができます。作成された各種類別のオブジェクトの総数を参照するには、[Metric]メニューから[Created Objects (Count)]を選択します。その結果、次のようなウィンドウが表示されます。
 
作成されたオブジェクトの参照    画面1
 
上の例では、最も作成頻度の高いオブジェクトはStringオブジェクトです。非常に多くのStringが作成されているため、それがどこで作成されているかを調べて、数を減らすことができないかを検討する価値があります。そうするには、Stringエントリをダブルクリックします。次のようなダイアログボックスが表示されます。
 
作成されたオブジェクトの参照    画面2
 
上の例では、Stringクラスのsubstringメソッドと、StringBufferとIntegerクラスのtoStringで多くのStringが作成されていることがわかります。toStringの呼び出しを減らすのは難しいと考えられますが、substringの呼び出しについて詳しく調査してみてください。[Mark to Find]を設定し、[Call Graph Tree (Call Count)]を表示してそのメソッドを探します。これを実行すると、次のようになります。
 
作成されたオブジェクトの参照    画面3
 
このメソッドは2度呼び出されていますが、ここでは1つだけが表示されています。[Call Graph Tree]でこのメソッドを呼び出しているオブジェクトを見ると、StringTokenizerの使用によって頻繁に呼び出されていることがわかります。さらに、StringTokenizerメソッドを呼び出しているのは、CSpClassNameのappendメソッドです。つまり、このメソッドを中心にStringTokenizerの使用を減らすべきである、ということを示しています。StringTokenizerの使用を減らすと、Stringオブジェクトの作成回数も減ります。同じように、作成回数の多いオブジェクトを調査します。

プロファイルデータによっては、[Metric]メニューで、作成された各種類のオブジェクトの合計サイズをバイト単位で表示できるオプションが使用できる場合があります。このオプションを、メモリを大量に使用している大きなオブジェクトの検出に使用することができます。

残ったオブジェクトの参照


参照すべきもう一つの項目は、アプリケーションが終了したときにヒープに残されているオブジェクトです。これは、プログラム中の「メモリリーク」の可能性を示します。このメモリリークは、アプリケーションが必要としていないのに参照が残っているオブジェクトです。HPjmeterは、メモリリークによってどの種類のオブジェクトがメモリに堆積しつつあるかを表示することができます。プログラムが終了しても残っているオブジェクトを参照するには、[Metric]メニューから[Residual Objects (Count)]を選択します。すると、次のようなウィンドウが表示されます。
 
残ったオブジェクトの参照  画面
 
残ったオブジェクトのメトリクスには、配列も含め、全てのオブジェクトが表示されます。横方向のバーは、残されているオブジェクトの数をグラフ表示したものです。

作成されたオブジェクトと残ったオブジェクトの数の比較


ある種類のオブジェクトの数が異常に高いと判断する際に、作成されたオブジェクトと残ったオブジェクトの数を比較すると有効です。まず、[Metric]メニューから[Residual Objects (Count)]を選択します。次に[File]メニューから[New Window]を選択し、表示された新しいウィンドウの[Metric]メニューから[Created Objects (Count)]を選択します。[Residual Objects]と[Created Objects]のビューを次に示します。
 
作成されたオブジェクトと残ったオブジェクトの数の比較  画面1

作成されたオブジェクトと残ったオブジェクトの数の比較  画面2
 
残ったオブジェクトのメトリクスには、配列も含め、全てのオブジェクトが表示されます。横方向のバーは、残されているオブジェクトの数をグラフ表示したものです。

また、残ったオブジェクトが何バイトの領域を占めているかを参照するのも有効です。これにより、メモリの消費に最も大きなインパクトを持ったオブジェクトに注目することができます。

プロファイル データファイルの比較


2つの異なるプロファイル データファイルを生成し比較するのが有効な場合もよくあります。これによって、特定の変更がどの程度パフォーマンスに影響を与えたかがわかります。また、アプリケーションの起動後、ある一定の間(たとえば、5分後から10分後まで)に何が起こっているかを調べることもできます。どちらの場合も、与えられた条件で2度、アプリケーションを実行してプロファイル データファイルを取得します。2度目の実行で、最初のプロファイル データファイルを上書きしてしまわないように注意してください。両方のファイルが生成されたら、[File]メニューの[Open]でどちらかをオープンします。同じように、もう一方をオープンします。次に[File]メニューから[Compare]を選択します。これで、次のように、2つのファイルを横に並べて比較できます。
 
プロファイル データファイルの比較  画面1
 
この比較で、実行時間、残ったヒープのサイズ、メソッドの数、スレッドの数など、2つのファイルの大きな違いを掴むことができます。個々のファイルを解析するのに使用するメトリクスのほとんどは、2つのファイルを比較する場合にも使用することができます。例として、2つのファイルを比較した場合の、[Residual Objects (Count)]メトリクスの結果を次に示します。
 
プロファイル データファイルの比較  画面2
 
プラスの値は、最初のファイルよりも2番目のファイルで多くのオブジェクトが作成されていることを示します。マイナスの値は、その反対です。この値で、変更がどのような影響を及ぼしたかを判断できます。これは、パフォーマンス全体ではなく、長期にわたるパフォーマンスについて知りたい場合に任意の初期化条件について調べるのに有効です。アプリケーションをまず一定時間実行し、次にそれよりも長い時間実行します。次にこの2つを比較し、2度の実行の間に発生したイベントだけが表示されるようにします。

結論


HPjmeterツアーをご利用いただき、ありがとうございました。もうHPjmeterの主要な機能については詳しくなられましたね。この強力なツールをJavaアプリケーションのパフォーマンスの向上にぜひお役立てください。それでは、コーディングをお楽しみください! ご活躍をお祈りします。
このページのトップへ

目次へ 前のページへ  

お問い合わせ

ご購入前のお問い合わせ


ご購入後のお問い合わせ

HPEサポートセンター
製品の標準保証でご利用いただける無償のサービスです。

ショールーム

ショールーム 導入をご検討のお客様へ
業務アプリケーションの継続・標準化・開発性とシステム担当者様、システム開発者様が抱える悩み・疑問に対する解決策実体験して頂けます。
印刷用画面へ
プライバシー ご利用条件・免責事項