NetBeans Profiler を使って、手軽にJavaアプリケーションのプロファイリングを始める

最近、周りでJavaのプロファイラの話が出たので、そういえば、NetBeans Profilerが優秀だったよなぁと思って、久しぶり(2006年にBlogで書いてました(NetBeans Profiler - Enjoy*Study)ので、その時以来かも…)に自宅のPCにNetBeansをダウンロードして試してみたら、さらにすごく使い勝手がよくなっていてびっくりました。

NetBeans Profiler を使えば、NetBeans IDEで開発したアプリケーション以外でも、とても簡単にプロファイルを始めることができます。

対象のアプリケーションに対して、JVMの設定を変えるような手間もありません。

以降に今回試した際の手順を書いてみます。

 

下記のサイトから、最新(NetBeans IDE 7.3.1)をダウンロードします。

とりあえず、プロファイラだけ使えればよいので、Java SE版を選びました。

インストーラに従ってインストールし、NetBeans IDEを起動します。

プロファイル対象のアプリケーションで使用するJavaに対して、事前に「プロファイラ調整の実行」を行います。これをしておかないと、そのJVMに対してアタッチできません。

メニューの「プロファイラ」→「拡張コマンド」→「プロファイラの調整の実行」を選択し

f:id:onozaty:20130727143745p:plain

 

対象となるJavaプラットフォームを選択します。

(ここに出ていない場合には、メニューの「ツール」→「Javaプラットフォーム」を選択し、対象のJavaを追加してから再度実施します)

f:id:onozaty:20130727144926p:plain

 調整が完了すると、プロファイラからアタッチ可能な状態となります。

 

「プロファイラ」→「プロファイラのアタッチ」を選ぶと、下記のようなウインドウが表示されます。

f:id:onozaty:20130727145929p:plain

ここで、プロファイルのタスクを選び、「アタッチ」ボタンを押下して、アタッチするプロセスを選びます。(現在実行中のプロセス一覧から選びます)

f:id:onozaty:20130727152310p:plain

これだけで、プロファイルが開始されます。

 

プロファイル先のアプリケーション(今回はEclipse上で動かしていたTomcat)には、下記のようにプロファイラと接続したことを示すメッセージがコンソールに表示されていました。

f:id:onozaty:20130727153903p:plain

 

下記は、メモリのライブ結果です。当然、GCを実行することもできます。

f:id:onozaty:20130727153423p:plain

 

さらに、メモリの詳細(オブジェクトのツリーなど)を確認したい場合には、いったん、ヒープをダンプします。

ヒープのダンプからは、インスタンスの詳細を確認することができ、どのように参照されているかも確認できます。

f:id:onozaty:20130727153636p:plain

 

CPUタスクからは、CPUの実行時間を計測できます。

f:id:onozaty:20130727160149p:plain

 

高機能で、とっても簡単ですね。(NetBeansが入っていない状態から、メモリのプロファイリングするまで30分もかかりませんでした)

今回は同一PC上で動作しているものに対してプロファイリングを行いましたが、リモートで行う機能もあるので、そちらも試してみたいと思いました。

NetBeans というか、NetBeans Profilerはほんと便利ですね!