[Jプローブ]Javaパフォーマンスソリューション
Eclipseと連携したパフォーマンスツール
~JProbe Eclipseプラグインの概要~
JProbe 8.2Jには、Javaの開発環境として最も使用されているEclipseにJProbeのフル機能を追加するプラグインが提供されています。JProbe Eclipseプラグインを利用すれば、ほかのテストツールを起動してアプリケーションの実行情報を再設定する必要はありません。Eclipseのパースペクティブから離れることなく、テスト実行と同様の手順でアプリケーションのパフォーマンス分析が行えます。開発者はプログラミング作業の効率性と生産性を保ちつつ品質を向上させることができます。
ここでは、JProbe Eclipseプラグインの導入とJava SE/Java EEアプリケーションの分析手順の概要を紹介します。
1. JProbe Eclipseプラグインの導入
この章では、JProbe Eclipseプラグインの導入について紹介します。
1.1 システム要件
JProbe Eclipseプラグインを利用するには以下の環境が必要です。
- ・Eclipse 3.3.2/3.4/3.5
- ・Sun JRE 6
- ・Graphical Editing Framework (GEF)
- ・JProbe 8.2J ※
- ・Web Tools Platform (Java EEアプリケーション分析時)
※ JProbe EclipseプラグインにはJProbe分析エンジンが含まれていません。分析を実行するためにはスタンドアロンで動作するJProbeを別途インストールする必要があります。
1.2 JProbe Eclipseプラグインのインストール
JProbe Eclipseプラグインのインストールは一般的なEclipseプラグインと同じです。グレープシティのUpdate Siteからオンラインでインストールする方法と、Eclipseのdropinsフォルダに手動でコピーする方法が利用できます。
1.3 起動オプションの変更
「1.1 システム要件」でも触れたとおり、JProbe EclipseプラグインにはJProbe分析エンジンが含まれていませんので、これを参照するためのパスやヒープサイズの調整をEclipseの起動オプションに指定する必要があります。Eclipse起動オプションを変更するにはEclipse インストールディレクトリのeclipse.iniを編集します。
-vmargs -Xms256m -Xmx1024m -Djprobe.home=C:¥Program Files¥JProbe 8.2.0J
2. Java SEアプリケーションの分析
この章では、JProbe Eclipseプラグインを利用したJava SEアプリケーションの分析方法を紹介します。EclipseでJava SEアプリケーションを開発する場合はJavaプロジェクトとして作成します。JProbe Eclipseプラグインは、開発中のJavaプロジェクトの設定を変更することなく、さまざまな分析を実行できます。
2.1 サンプルアプリケーション
分析対象アプリケーションのサンプルとしてJProbeに付属するLeakExampleを使用します。LeakExampleは、使用されていないコレクション参照によってヒープ内に徘徊オブジェクトを発生させるMemory分析用のデモアプリケーションです。

Eclipseの[Run]-[Run As]-[Java Application]を選択し、LeakExampleを実行してみます。

LeakExample
LeakExampleは単純なSwingアプリケーションです。起動時の画面には[追加]と[削除]の2つのボタンが表示されます。[追加]ボタンをクリックすると画面にボタンが追加され、[削除]ボタンをクリックすると画面上のボタンが削除されます。

2.2 JProbeを使用したJava SEアプリケーションの実行
JProbe Eclipseプラグインをインストールすると、EclipseにJProbeパースペクティブが追加されます。JProbe Eclipseプラグインを使用したアプリケーションの分析はこのパースペクティブで行います。

JProbeを使用したアプリケーションの実行方法は、通常のJavaアプリケーションの実行方法と同様です。Eclipseのメニューから[Run]-[JProbe設定]を選択します。
JProbeの実行設定画面は、Javaアプリケーションの実行設定と非常によく似ています。異なるのはJProbeの分析オプションを指定するための[JProbe]タブが追加されている点です。メインクラスやプログラム引数などの設定は、Javaアプリケーションの実行設定がそのまま引き継がれます。
LeakExampleを分析するために特に追加設定を行う必要はありません。[JProbe]タブ上部の[JProbe分析タイプ]で[Memory]を選択し、[JProbeの実行]ボタンをクリックします。
アプリケーションを実行し、JProbeセッションを接続すると[Memoryセッション]ビューが表示されます。[Memoryセッション]ビューには、メモリの使用状況、ガベージコレクションの実行状況、ヒープに存在するインスタンスなど、現在実行しているアプリケーションに関する各種情報が表示されます。
2.3 ユースケースの実行
下記のユースケースを実行して、アプリケーションのMemory分析データを収集します。
ユースケース: 手順1. [追加]ボタンを10回クリックし、ボタンをパネルに追加する。 手順2. [削除]ボタンを10回クリック、ボタンをパネルから削除する。 期待結果: ボタンをパネルから削除したときに、JButtonオブジェクトはヒープから 削除される。
JProbeでは分析目的に応じて収集するデータのレベルを変更することができます。ユースケースを実行する前に計測レベルを設定します。

ユースケースの実行後、計測レベルを再度OFFに変更します。収集されたデータはスナップショットファイルに出力されます。
2.4 アプリケーションの分析
ユースケースの「期待結果」のとおりにアプリケーションが動作しているか、[インスタンス]ビューで確認します。[インスタンス]ビューには、アプリケーションの実行中に割り当てられたクラスのインスタンス(オブジェクト)に関するデータが含まれています。
JButtonの[計測インスタンス数]はユースケースの手順1で追加したボタンの数と同じ10ですが、[解放済インスタンス数]は0です。つまり、ボタンはLeakExampleの画面から削除されましたが、Javaヒープからは削除されておらずメモリリークが発生していることがわかります。
さらにJProbeでは、個々のインスタンスの詳細情報を参照し、インスタンスを割り当てたソースコードの行数を特定することができます。
2.5 改善したアプリケーションの分析
ソースコードを解析したところ、メモリリークは画面から削除したJButtonインスタンスを破棄せず、コレクション内に保持し続けていたことが原因でした。
画面から削除したJButtonインスタンスをコレクションから破棄するよう改善したアプリケーションを使用し、再度ユースケースを実行します。
改善したアプリケーションではJButtonの[計測インスタンス数]は0、[解放済インスタンス数]が10になり、メモリリークの問題が解決されたことが確認できました。
3. Java EEアプリケーションの分析
この章では、JProbe Eclipseプラグインを利用したJava EEアプリケーションの分析方法を紹介します。EclipseでJava EEアプリケーションを開発する場合、アプリケーションを動的Webプロジェクト(Dynamic Web Project)として作成し、Eclipse内に定義したアプリケーションサーバーでテスト実行を行うことができます。JProbe Eclipseプラグインでは、これと同様の手順でJava EEアプリケーションを分析できます。
3.1 アプリケーションサーバーの定義
Java EEアプリケーションの分析に使用するアプリケーションサーバーを定義します。
3.2 JProbeを使用したJava EEアプリケーションの実行
通常、アプリケーションサーバーは[Servers]ビューのサーバー名を右クリックし、[Start]または[Debug]を選択して起動します。
JProbeを使用する場合は、[Servers]ビューのサーバー名を右クリックし、[Profile]を選択して起動します。[JProbeを使用したサーバーの実行]ダイアログボックスが表示されますので、分析タイプと必要な設定を行い[Finish]をクリックします。
アプリケーションサーバーが起動し、JProbeセッションを接続すると分析タイプに応じたセッションビューが表示されます。
ここから先はJava SEアプリケーションの実行時と同様です。分析対象のJava EEアプリケーションに対するユースケースを実行し、収集したデータをもとに各種の分析を行うことができます。
4. まとめ
JProbe Eclipseプラグインの導入とJava SE/Java EEアプリケーションの分析手順の概要を紹介しました。
JProbeにはヒープの使用状況(プール別、世代別)、ガベージコレクションの実行状況、スレッドステータスのリアルタイム表示や、システムのボトルネックとなりがちなJDBCコンポーネントにフォーカスした分析など、Javaアプリケーションの信頼性、効率性、機能性を客観的に分析するための機能が数多く搭載されています。
品質保証とプロジェクト成功のセオリーは徹底したテストです。JProbeの機能をEclipseに統合することで、開発者はEclipseから離れることなく最小限の作業負荷で品質向上に取り組むことができます。



![画像「[JProbe]タブ」](../images/eclipse/jprobetab_s.png)
![画像「[Memoryセッション]ビュー」](../images/eclipse/memorysession_s.png)
![画像「[インスタンス]ビュー」](../images/eclipse/instanceview_s.png)
![画像「[インスタンスの詳細]ビュー」](../images/eclipse/instancedetailview_s.png)


![画像「[JProbeを使用したサーバーの実行]ダイアログ」](../images/eclipse/serverlaunch_s.png)