NetBeans Profiler 5.5 の使用方法
「プロジェクトをプロファイル」を使用した J2EE アプリケーションのプロファイル
「プロジェクトをプロファイル」の方法を使用して、ローカルの Tomcat、Sun Java System Application Server / Glass Fish、または JBoss がインストールされた環境で実行中のWeb アプリケーション、EJB モジュールおよびエンタープライズアプリケーションのプロファイルが行えます。この方法を使用して、既存の Ant スクリプト (自由形式 Web アプリケーションまたは EJB モジュールプロジェクト) から作成された J2EE アプリケーションのプロファイルを行うこともできます。この方法を使用したアプリケーションのプロファイルは非常に簡単で、マウスを数回クリックするだけでプロファイルを開始でき、設定はほとんど必要ありません。全般的に、この方法は「プロジェクトを実行」の方法とちょうど同じように動作し、J2EE アプリケーションの開始時に Profiler を起動します。この方法は、経験の浅い新規ユーザーに向いています。
リモートアプリケーションサーバー上の J2EE アプリケーション、あるいは Tomcat、Sun Java System Application Server / Glass Fish、JBoss を除くローカルサーバー上の J2EE アプリケーションをプロファイルする場合は、「Profiler を接続」を使用した J2EE アプリケーションのプロファイルを参照してください。
注: J2EE アプリケーションからプロファイル結果を取得して評価する前に、プロファイルのヒントをよく理解しておくことをお勧めします。プロファイルのヒントには、プロファイル対象のアプリケーションの動作やプロファイル結果の精度に関するさまざまな情報やヒントが記されています。
目次
- ローカルの Tomcat、Sun Java System Application Server / GlassFish、または JBoss 上の Web アプリケーションのパフォーマンスのプロファイル
- EJB モジュールおよびエンタープライズアプリケーションのパフォーマンスのプロファイル
- 既存の Ant スクリプト (自由形式) を使用する J2EE アプリケーションのパフォーマンスのプロファイル
- J2EE アプリケーションのメモリー使用のプロファイル
ローカルの Tomcat、Sun Java System Application Server / GlassFish、または JBoss 上の Web アプリケーションのパフォーマンスのプロファイル
ローカルの Tomcat、Sun Java System Application Server / GlassFish、または JBoss上で実行中の Web アプリケーションは、NetBeans Profiler を使用したプロファイルに向いており、そうしたプロファイルの最も簡単な構成です。ユーザに求められる設定も最小限で済み、マウスを数回クリックするだけでプロファイルを開始できます。Web アプリケーションのパフォーマンスのプロファイルについては、NetBeans Profiler チュートリアルに例が示されています。Web アプリケーションのパフォーマンスをプロファイルするフラッシュデモは、こちらから閲覧できます。
プロファイルセッションの設定
Web アプリケーションが IDE の主プロジェクトとして設定されている場合、「プロファイル」メニューの「主プロジェクトをプロファイル」を選択して、「プロファイルタスクの選択」ダイアログを開くことができます。または、IDE で開かれている Web アプリケーションプロジェクトがあればそれを選択し、「プロファイル」メニューの「プロジェクトをプロファイル」を選択して、「プロファイルタスクの選択」ダイアログを開くこともできます。
.jsp ページまたはサーブレット上で「ファイルをプロファイル」を選択してファイルをプロファイルする場合、その動作は「(主) プロジェクトをプロファイル」のときと同様です。唯一の違いは、アプリケーションの実行時に、プロジェクトのデフォルトの Web ページの代わりに、選択された Web ページがブラウザで開かれることです。
注: プロジェクトのプロファイルをはじめて行う場合は、プロファイルを有効にするためにプロジェクトの構築スクリプトに変更が必要なことを通知するメッセージが表示されます。
アプリケーションのプロファイル時には、「プロファイルタスクの選択」ダイアログでプロファイルの方法を選択します。「プロファイルタスクの選択」ダイアログでは、次の方法が利用できます。
パフォーマンスを解析 - アプリケーション全体。 アプリケーション全体の動作の概要が必要な場合、またはより詳細なプロファイル設定を試さない場合には、このプロファイル方法を選択します。このモードでは、アプリケーションのすべてのメソッドに対してプロファイルが行われます。これらのメソッドからコア Java クラスに至るまでの呼び出されるすべてのコードもまた、次で説明する計測フィルタによって除外されていないかぎり、プロファイルが行われます。一般に、「アプリケーション全体」のプロファイルは、「アプリケーションの一部」の方法よりもプロファイルのオーバーヘッドが大きくなります。
「プロファイルタスクの選択」ダイアログで「Profile application server startup」オプションを選択すると、アプリケーションが何らかのコードを実行する前に、サーバーの起動がプロファイルされます。一般的に、この機能を通常のプロファイルで使用する必要はありません。
パフォーマンスを解析 - アプリケーションの一部。 パフォーマンスのボトルネックがどこかわかっている場合、あるいは 1 つまたは少数のサーブレットだけといったコードの特定の部分に対してプロファイルを行う場合には、このプロファイル方法を使用します。この方法を使用すれば、アプリケーションのプロファイルの起点となるプロファイルの root メソッドを設定できます。root メソッドを使用したプロファイルの詳細については、root メソッドの計測を参照してください。
一般に、このプロファイル方法では、「アプリケーション全体」のプロファイルよりもプロファイルのオーバーヘッドはかなり小さくなります。この方法を選択すると、本当に関心のあるデータだけが収集されて表示されます。プロファイルの root メソッドを定義するには、「選択」をクリックし、「プロジェクトから追加」オプションを使って、適切なプロジェクトのツリーを使用します。
計測フィルタ。 計測フィルタを使用すると、関心のない各種パッケージおよびクラスを除外することができます。これにより、プロファイルのオーバーヘッドはかなり軽減されます。計測フィルタを使用すると、計測およびプロファイルの対象となるパッケージおよびクラス (アプリケーション全体、または root メソッド実行の内部) の指定が可能です。
計測フィルタには、次の 2 種類があります。
- 除く。このオプションを選択すると、指定されたパッケージおよびクラスがプロファイルから除外されます。
- 含む。 このオプションを選択すると、指定されたパッケージおよびクラスだけがプロファイルされます。
計測フィルタの定義を簡単に行うために「クイックフィルタ」を選択したり、特定のプロジェクトまたは特定の種類のプロファイルのための独自の「フィルタセット」を定義したりできます。たとえば、Tomcat 上の Web アプリケーションをプロファイルする時に使用する計測フィルタを作成できます。コア Java クラス、Tomcat クラス、および NetBeans クラスを除外する「除く」フィルタセットを作成 (HTTP モニターが有効なときに便利) して、このフィルタセットに「Tomcat WebApp Exclusive」といった名前を与えることができます。または、test.servlets. や test.beans.MyBean など、プロジェクトで定義されたパッケージだけを指定する「含む」クイックフィルタを作成することもできます。このフィルタを選択すると、test.servlets パッケージ内のクラスおよび test.beans.MyBean クラスだけがプロファイルされます。
この例から、いくつかのパッケージおよびクラスの定義を同時に使用できることがわかります。これを行う場合は、スペース ( ) またはコンマとスペース (, ) をセパレータとして使用します。また、フィルタ定義の最後にワイルドカード "*" を使用することもできますが、計測フィルタは単純な開始文字列のロジックを使用するので、このワイルドカードは評価の途中で単に取り除かれます。
計測フィルタの定義および使用の詳細な情報については、パフォーマンスの解析 を参照してください。
プロファイルの開始
プロファイルを開始するには、「プロファイルタスクの選択」ダイアログで「実行」をクリックします。すぐにプロファイルセッションが始まります。「実行」のクリックすると、次の処理が行われます。
- Web アプリケーションがコンパイルされる
- ターゲットサーバーがプロファイルモードで起動する
- アプリケーションが配備される
- 適切な Web ページがブラウザに表示される
注: Windows マシン上の Sun Java System Application Server 9 / GlassFish サーバーにある Web アプリケーションをプロファイルする場合、NetBeans IDE が空白文字を含むパスにインストールされていると (デフォルトのインストール場所 C:\Program Files\netbeans-5.0など)、プロファイル用のサーバーの起動に失敗する可能性があります。解決策は、パスに空白文字が含まれない場所 (C:\netbeans-5.0 など) にNetBeans IDE をインストールまたはコピーして、そのインストール場所から NetBeans を実行することです。
プロファイル結果の取得および評価
プロファイル結果は、プロファイルセッションが開始されるとすぐに収集されます。「アプリケーション全体」のプロファイル方法を使用する場合、サーバーの起動後、具体的には Web アプリケーションのリスナーおよびフィルタが初期化された後、すぐに関心のあるデータを入手できます。「Profiler」ウィンドウのコントロールを使用すると、プロファイルのライブ結果を表示したり、収集されたデータのスナップショットを作成したりできます。選択したプロファイルの root メソッドにもよりますが、「アプリケーションの一部」のプロファイル方法を使用している場合には、このデータはおそらく取得できません。
普通はリスナーまたはフィルタについてのデータには関心がないので、「収集結果をリセット」をクリックして、このデータをクリアできます。利用可能な最初のデータは、通常は JavaBeans またはカスタムタグ、あるいはその両方を使用する .jsp ページの表示や、サーブレットの doGet/doPost メソッドの処理など、Web ブラウザでの何らかのアクションの結果としていくつかのコードが呼び出されたあとに収集されます。アプリケーションをはじめて起動したときに収集されたデータは、多くの場合、Web アプリケーションの起動動作だけを示すことに注意します。
はじめて .jsp ページが表示される場合、このページはサーバーによって内部でサーブレットにコンパイルされ、呼び出しツリーとメソッドのタイミングに影響を与えます。また、サーブレットおよびほかのアプリケーションのコードの動作は、最初の実行の間は、アプリケーションが絶えず実行されている実際の稼動環境とはわずかに異なっている可能性があります。実際のアプリケーションのパフォーマンスをより良く示すプロファイルデータを得るには、何らかの時間を計測する前にプロファイル対象のコードに、ある程度のワークロードを生成することをお勧めします (呼び出しツリーがこの影響を受けてはいけません)。これには、ロードジェネレータが役立ちます。また、Web アプリケーションが各種ブラウザのキャッシュ機能とどのように連携するのかを調査する場合があるかもしれません。
収集されたデータの可読性を向上させるには、「プロファイル結果」ウィンドウの「ホットスポット」ビューにある結果フィルタが利用できます。結果フィルタはすでに収集された結果に適用されるもので、計測フィルタとは関係ありません。結果フィルタを使用すると、定義されたパターンで始まる結果、そのパターンを含む結果、またはそのパターンで終わる結果が選別されます。もっと複雑な正規表現を選別処理に利用することもできます。データの選別は、ちょうど最初の結果表の列に表示されるときに、パッケージ、クラス、およびメソッドの名前に基づいて行われます。計測フィルタと同様に、スペースまたはコンマとスペースでパターンを区切って、1 つ以上のパターンを指定できます。
EJB モジュールおよびエンタープライズアプリケーションのパフォーマンスのプロファイル
Web アプリケーションの場合と同じ方法で、EJB モジュールまたはエンタープライズアプリケーションのパフォーマンスをプロファイルすることができます。唯一の違いは、EJB モジュールおよび一部のエンタープライズアプリケーション (その設定による) の場合、配備後に Web ブラウザが自動的に起動しないことです。実際には、単純に「実行」アクションを使用してプロジェクトを実行するという動作を反映しています。EJB モジュールまたはエンタープライズアプリケーションのプロファイルを行うには、次の方法のうち 1 つに従います。
手動で起動された Web ブラウザまたはほかのクライアントからアプリケーションのコードを呼び出す。 アプリケーションがサーバーに配備されたあと、デバッグまたはアプリケーションの機能評価と同じ方法でそのコードを呼び出します。通常、これは、Web ブラウザでプロファイル対象の J2EE アプリケーションのエンタープライズロジックを使用する Web アプリケーションのフロントエンドを起動することを意味します。また、ほかの種類のクライアントも使用できます。一度プロファイル対象の J2EE アプリケーションを起動すると、プロファイルデータが利用できます。
適切な Web アプリケーションのフロントエンドをプロファイルする。 プロファイル対象のプロジェクトとして使用される関連 Web アプリケーションを指定することができます。通常は、ブラウザでのユーザーのアクションの結果として、EJB のコードが実行されます。このアクションが Web アプリケーションのコードで実行および処理される場合は、その呼び出しツリーに EJB コードが表示されます。この方法を使用して EJB モジュールをプロファイルするには、ローカルの Tomcat、Sun Java System Application Server / GlassFish、または JBoss 上の Web アプリケーションのパフォーマンスのプロファイル に記述された手順に従います。プロファイルを行う前に EJB モジュールをコンパイルしてサーバーに配備する必要があります。関連する Web アプリケーションをプロファイルする時は、この処理が行われていないためです。
既存の Ant スクリプト (自由形式) を使用した J2EE アプリケーションのパフォーマンスのプロファイル
既存の Ant スクリプトを使用した Web アプリケーションまたは EJB モジュールのプロファイルは、上で説明した ローカルの Tomcat、SJSAS / GlassFish または JBoss サーバー上の Web アプリケーションまたは EJB モジュールのプロファイルと同様です。唯一の違いは、構築スクリプトおよびサーバー起動スクリプトに変更が必要なことです。
自由形式 J2EE アプリケーションのプロファイル用の設定
既存の Ant スクリプトを使用して J2EE アプリケーション (自由形式プロジェクト) のプロファイルを行うには、構築スクリプトおよびサーバー起動スクリプトをいくつか変更する必要があります。これは一般的に、プロジェクトをプロファイルするための新しい Ant ターゲット (そして最終的には別のファイル群のプロファイル用にもう 1 つ) を追加して、Profiler Agent を有効にするためにサーバー起動スクリプトを変更することを意味します。また、サーバーにアプリケーションを自動的に配備するために、このプロファイル用の Ant ターゲットを設定します。構築スクリプトをプロファイル用に変更するための詳細な情報は、既存の Ant スクリプトを使用したプロジェクト (自由形式プロジェクト) のプロファイル用の設定 に記述されています。サーバー起動スクリプトの変更についての情報は、Profiler の「接続ウィザード」で提供されます。このウィザードを表示するには、メインメニューから「プロファイル」>「Profiler を接続」を選択して、「プロファイルタスクを選択」ダイアログで「接続ウィザード...」をクリックします。
はじめて自由形式プロジェクトのプロファイルを開始するときには、プロファイルに使用されることになる Ant タスクを選択するように求められます。この設定はそのときに保存され、このプロジェクトのほかのすべてのプロファイルセッションで使用されます。一度自由形式プロジェクトがプロファイル用に設定されると、ほかの IDE J2EE プロジェクトと同様にこのプロジェクトをプロファイルできます。
設定後は、ローカルの Tomcat、Sun Java System Application Server / GlassFish、または JBoss 上の Web アプリケーションのパフォーマンスのプロファイルまたはEJB モジュールおよびエンタープライズアプリケーションのパフォーマンスのプロファイルで説明されている手順に従い、既存の Ant スクリプトを使用した J2EE アプリケーションのプロファイルを行うことができます。Tomcat または Sun Java System Application Server に配備されたプロジェクトだけではなく、プロファイル用に設定されたどんなサーバーにある自由形式プロジェクトでもプロファイルが可能です。
J2EE アプリケーションのメモリー使用のプロファイル
NetBeans Profiler を使用すると、「メモリー使用を解析」タスクを選択することによって J2EE アプリケーションのメモリー使用を解析できます。「プロジェクトをプロファイル」を選択することで、ローカルの Tomcat または Sun Java System Application Server で実行中の J2EE アプリケーションのメモリー、または既存の Ant スクリプト (自由形式) から適切に構成された J2EE アプリケーションのメモリーをプロファイルできます。メモリーのプロファイルの詳細については、メモリー使用を解析を参照してください。Web アプリケーションのメモリー使用のプロファイルの例については、NetBeans Profiler チュートリアルを参照してください。
メモリーのプロファイル時には、プロファイルの root メソッドや計測フィルタを設定できないため、サーバーの稼働中に作成されるすべてのオブジェクトが追跡されます。これにより、Sun Java System Application Server / GlassFish のような複雑なアプリケーションサーバーの場合は、相当な量のプロファイルのオーバーヘッドおよびメモリー消費が生じる可能性があります。そのため、この種類のプロファイルには十分に強力なマシンを使用することをお勧めします。プロファイルのオーバーヘッドを軽減するために、10 個のオブジェクトごとにプロファイルを行うように設定を変更することができます。また、オブジェクト割り当てのためのスタックトレースの記録を無効に (または制限) する場合があるかもしれません。
メモリーリークを検出するために J2EE アプリケーションのプロファイルを行う場合は、生存中世代の測定値を使用すると非常に便利なことがあります。ガベージコレクションのサイクルを超えて生存しているさまざまなオブジェクトの世代数を追跡することによって、NetBeans Profiler はメモリーの使用量が著しく大きくなる前にメモリーリークを検出することができます。詳細については、プロファイル結果 - メモリー使用を参照してください。
