パフォーマンスを解析
ターゲットアプリケーション全体のパフォーマンスを解析することも、アプリケーションコードの一部 (特定のコードフラグメントなど) だけに対してプロファイルを行うこともできます。
CPU のパフォーマンスを Profiler で解析する方法
- メインメニューから「プロファイル」>「主プロジェクトをプロファイル」(
) を選択します。
- 「プロファイルタスクの選択」ダイアログで「パフォーマンスを解析」を選択します。
- 次のいずれかのプロファイルオプションを選択します。
- アプリケーションのパフォーマンス
- アプリケーションの一部
- 必要があれば、クラスに対して既存のフィルタを指定するか、新しいカスタムフィルタセットを作成します。
- ダイアログの下部にある「実行」をクリックしてアプリケーションを起動し、監視タスクを開始します。
プロファイル結果を表示するには、「Profiler」ウィンドウで「ライブ結果」 (
) ボタンをクリックします。「プロファイル結果」タブに結果が表示されます。
プロファイルオプション
アプリケーションのパフォーマンス
「アプリケーションのパフォーマンス」を選択すると、メソッドレベルの CPU パフォーマンス (実行時間) のプロファイルが実行されます。アプリケーション全体をプロファイルするか、アプリケーションの一部だけをプロファイルするかを指定できます。
- アプリケーション全体。
このモードでは、Profiler はプロファイルの対象となるアプリケーションのすべてのメソッドを計測します。スレッドではメソッドの開始時に「メソッドに入る」イベントが発生し、メソッドの終了時にはこれに対応する「メソッドから出る」イベントが発生します。いずれのイベントにもタイムスタンプが記録されます。データの処理はリアルタイムで実行されます。
サーバーに配備されるアプリケーション (エンタープライズアプリケーションまたは Web モジュールなど) または NetBeans プラットフォームに配備されている NetBeans のモジュールやスイートをプロファイルする場合には、そうしたサーバーまたはプラットフォームの起動をプロファイルするオプションもあります。このオプションを選択すると、JVM によって実行される最初のメソッドが計測時に root メソッドとして使用されます。
- アプリケーションの一部。
このモードでは、アプリケーションのコードの限定された部分に対して計測とプロファイルを行います。アプリケーションの一部のプロファイルを開始しても、アプリケーションのいずれかのスレッドがプロファイル用 root メソッド に入るまで、プロファイルデータの収集は開始されません。 プロファイル対象をアプリケーションのコードの一部に限定すると、プロファイルのオーバーヘッドを大幅に軽減させることができます。さらに、一部のプログラムでは、詳細で実態に即したパフォーマンスデータを取得するにはこのオプションの使用が必須になる場合があります。これらのプログラムでは、アプリケーション全体をプロファイルすると、生成されるデータ量があまりに多く、アプリケーションが使用できなくなり、場合によっては (予期しないタイムアウトなどが原因で) クラッシュすることもあります。
クラスのフィルタ
プロファイル対象のクラスにフィルタを設定すると、一時的なオーバーヘッドを詳細に制御できます (ただし取得できる情報量は制限されます)。コンボボックスで次のいずれかのフィルタオプションを選択するか、「フィルタをカスタマイズ」をクリックしてカスタムフィルタセットを作成します。
- すべてのクラスをプロファイル
このオプションを選択すると、タスクの実行時にクラスのフィルタは適用されません。
- 簡易フィルタ
このオプションを選択すると、「クイックフィルタの設定」ダイアログが開きます。このダイアログでは、フィルタの種類と値を入力するだけでフィルタを設定できます。このフィルタは、プロファイル対象のメソッド、クラス、またはパッケージに対して、単純な「前方一致」比較を行います。このため、フィルタの値は有効な Java 識別子である必要があります。複数の文字列を指定するには、各文字列をスペースまたはコンマ (とスペース) で区切ります (「java., javax., sun.」など)。

- 定義済みフィルタセット
事前定義された Profiler のフィルタ (Java のコアクラスを除外) を選択するか、「フィルタをカスタマイズ」をクリックして独自のフィルタセットを定義します。(「カスタムフィルタセットの作成」を参照)
カスタムフィルタセットの作成
「フィルタセットのカスタマイズ」ダイアログで、定義済みフィルタセットの作成、削除、または編集 (名前、種類、または有効なフィルタの変更) を行うことができます。新しいフィルタを作成すると、このフィルタはコンボボックスのフィルタリストに表示されます。
カスタムフィルタを作成するには、カスタムフィルタの名前を設定して、「グローバルフィルタ」リストから任意のフィルタを選択して組み合わせます。「グローバルフィルタを編集」をクリックすると、「グローバルフィルタを編集」ダイアログでグローバルフィルタの追加、削除、編集ができます。各フィルタセットまたはフィルタには、一意の名前を設定する必要があります。
アプリケーションの一部をプロファイルする場合、選択した部分の容量によっては、アプリケーション全体のプロファイルと比較してオーバーヘッドが大きく軽減される場合があります。これは、アプリケーションがプロファイルデータの生成に必要とする時間が短縮され、またツールがこのデータの処理に必要とする時間も短縮されるためです。
カスタムプロファイルモードでは、プロファイルデータの収集に関連する CPU プロファイルオプションがさらに多く用意されています。
正確な結果の取得
Profiler では Sun の HotSpot JVM が使用されています。アプリケーションの実行の際、多くの Java バイトコードはマシンコードにコンパイルされる可能性があります (通常、メソッドが数千回実行されれば、コンパイルされる可能性は十分にある)。対象の呼び出しグラフでいずれかのメソッドがすでにマシンコードにコンパイルされている場合、動的計測の開始時にこれらのメソッドの実行速度が急激に遅くなる場合があります。これは、メソッドが計測され、基のバイトコードと変更されたバイトコードのホットスワップが行われる際に、アプリケーションの実行開始時と同様、まず始めに新しいバイトコードの解釈が行われるためです。そのあと、標準のポリシーに従って再びコンパイルされる可能性があります。さらに、バイトコードの解釈への一時的な切り替わりは、そのメソッド自体は計測対象ではない、計測されるメソッドを呼び出すメソッドに対しても行われることがあります。このため、Profiler が呼び出しグラフを検出している間と、そのあとしばらくの間、アプリケーションの実行時間がかなり遅くなることがあります。この期間の CPU プロファイル結果は通常の実行を反映していません。
呼び出しグラフの計測後しばらくの間アプリケーションを実行させて、そのあとに、メインメニューで「プロファイル」>「収集結果をリセット」を選択するか、「Profiler コントロールパネル」で「収集結果をリセット」ボタン (
) をクリックし、すでに収集されたプロファイル結果をいったん削除することを推奨します。(サーバーサイドアプリケーションの場合、数百または数千の要求を処理させるなど。)そのあとで収集されるプロファイル結果は、はるかに実態に即したものになります。
関連項目