パフォーマンスのボトルネックを表示する

パフォーマンスのボトルネックは、統計ビューを使用して識別することができます。  このトピックでは、実行時間を改善するためのシナリオについて説明します。 まず、実行時間の遅れの原因となるパッケージを識別する、 パッケージ統計ビューから開始します。ここから掘り下げて、 実行のローパフォーマンスの原因であるクラスまたはメソッドを探します。

プロファイルを作成するアプリケーションを起動する場合、実行フロー情報の 収集を使用可能にします。  (プロファイル作成オプションの、 「アプリケーションが遅すぎる (My application is too slow)」を選択し、 次に詳細オプションから「実行フローのグラフィカル詳細の表示 (Show Execution flow graphical details)」を選択します。)   

パッケージ統計ビューが開くと、以下のように表示されます。

 

このビューには、含まれているパッケージごとにグループ化された、 さまざまなクラスの統計が表示されます。  このビューは、メモリー割り振りの統計や時間ベースの統計など、 カスタマイズして、どのタイプの統計データも表示することができます。 ここでは、 時間に関連した列に必要だった情報が含まれているため、 その列が可視であったことを確認します。(右マウス・ボタンをクリックして、 「列の選択 (Choose Columns)」を選択して、 これらの列を可視になるよう設定します。)  また、実行ベース時間列を使用して、 パッケージもソートします。 上記のように、 com.ibm.ws.ejbpersistence.dataaccess パッケージが実行 "ホット・スポット" であり、 このパッケージ内で、DataAccessRequestImpl が実行時間の遅延の原因のクラスです。

この情報を取得したら、クラス統計ビューにドリルダウンし、 クラスの全体的なローパフォーマンスの原因となるメソッドを識別します。  


この時点で、 実行メソッドが DataAccessRequestImpl クラスのローパフォーマンスの 原因であることがはっきりと分かりました。その実行時間は、他のメソッド、 executeOneRowFBPK に費やされる時間と比較して非常に高くなっています。

クラス統計ビューについて詳しく見てみましょう。ここにいる間に注目に価する、 とても興味深いことが 1 つあります。java.text.NumberFormat クラスが、 実行時間の遅延の原因となっているクラスのリストの次にあります。そして、特に、 java.text.NumberFormat.getCurrencyInstance() は、そのクラスに費やされる時間をとります。 これにより、何らかの明らかに単純なメソッドを使用するためにどれほどのコストが かかるかについて予想が付きます。NumberFormat.getCurrencyInstance() が単純な API に見えても、それを何度も呼び出した場合は、アプリケーションの パフォーマンス全体に大きな影響を与えることがあります。

では、ここで DataAccessRequestImpl.execute() メソッドのメソッド呼び出しに戻ります。プロファイル作成 ツールの強力なフィーチャーの 1 つは、アプリケーション実行のグラフィカル表記です。 これにより、メソッド呼び出しレベルでメソッド実行を確認することができます。このビューは、 実行パターンと、同じメソッドの呼び出し間の差を見ることができるため有用です。  以下は、DataAccessRequestImpl.execute() メソッドの呼び出しを図示した、 メソッド呼び出しビューです。


 

このグラフィックから、実行スタックのこの呼び出しの呼び出し側を確認したり、 メソッドのソース・コードにジャンプすることができます。  また、カーソルをバーの上に移動することにより、費やされた時間を見ることもできます。

以下のメソッド呼び出しテーブルには同じメソッド呼び出しが表示されていますが、 ここではテーブル形式で表示されています。最初のメソッド呼び出しの場合、 後のメソッド呼び出しと比較して、実行時間 (累計時間列を参照) が非常に高い点に注意してください。


 

メソッド呼び出し実行スタックを分析することにより、なぜこの特定の呼び出しが 残りのメソッド呼び出しよりも遅かったのかその理由が分かります。メソッド呼び出しの パターンを見ると、OnlineItembean.FindByValue(IndexedObject) メソッドへの 最初の呼び出しが、残りのメソッド呼び出しよりもずっと多くの 時間がかかっていることに気付きます。

つまり、最終的に、長い実行時間全体の原因となったメソッドが、 OnlineItembean.FindByValue メソッドの先頭の呼び出しであったことが分かりました。

 

関連概念
プロファイル作成ツールの概説

関連タスク
アプリケーションのプロファイルを作成する
Java プロセスを起動する/接続する

 
 

>