3.Enerjy Thread Profile
プログラムのデバッグの際にスレッド周りの不具合を検出するのは、簡単ではありません。Enerjy Thread Profilerを利用すると、デッドロックの検出やスレッドのモニタリングをGUIで非常に簡単に行うことができます。GUIによる分かりやすいグラフにより、スレッドに関する問題の発見、アプリケーションチューニングを簡単に行うことができます。
■特長
Enerjy Thread Profilerの特長は以下のとおりです。
・デッドロック検出機能
デッドロックを自動的に検出し、表示します。
・スレッドモニタリング
ヒープとスレッドの状態をグラフで表示し、モニタリングすることができます。
・少ないオーバヘッド
プロファイルを行ってもプログラムのオーバヘッドが少なくて済みます。
・リモートプロファイリング
別のマシン上で実行されているアプリケーションのプロファイリングを行うことができます。
■入手方法
Enerjy Thread Profilerは、無料ではありません。下記のURLからソフトウェアのダウンロードとライセンスの取得を行ってください。
ライセンスを取得したら、Eclipseのメニューの[ウィンドウ]→[設定]からEnerjyを選択し、Thread Profilerを選択し、取得したシリアル番号とシリアルキーを入力します。5日間の試用ライセンスもありますので、まずは、そちらで評価し、導入効果を実感してから購入すると良いでしょう。
■使い方
プロファイルしたいアプリケーションをあらかじめEclipse上で実行します。その後、Eclipseのメニューの「実行」「構成をプロファイル」「Thread」で実行名を選択すると、スレッドプロファイリングを開始します。
ここでは、次のようなデッドロックを引き起こすサンプルアプリケーションを実行してみます。
public class Deadlock extends Thread { public static Object l1 = new Object(); public static Object l2 = new Object(); private int index; public static void main(String[] a) { Thread t1 = new ThreadA(); Thread t2 = new ThreadB(); t1.start(); t2.start(); } private static class ThreadA extends Thread { public void run() { synchronized (l1) { System.out.println("スレッド1: l1に対するロックを取得"); try { Thread.sleep(10); } catch (InterruptedException e) {} System.out.println("スレッド1: l2のロックの開放待ち"); synchronized (l2) { System.out.println("スレッド1: l1、l2に対するロックを取得"); } } } } private static class ThreadB extends Thread { public void run() { synchronized (l2) { System.out.println("スレッド2: l2に対するロックを取得"); try { Thread.sleep(10); } catch (InterruptedException e) {} System.out.println("スレッド2: l1のロックの開放待ち"); synchronized (l1) { System.out.println("スレッド1: l1、l2に対するロックを取得"); } } } } }
上記のクラスに対して、Thread Profilerを実行すると、次のような画面が表示されます。
中央のビューにスレッドの状態を表すグラフが表示されます。スレッドの状態をグラフで表すビューの各色は次のような意味を持ちます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
この例では、デッドロックが発生したため、DEADLOCK!と表示されて(図8の丸数字1の個所)プログラムが停止しています。このようにThread Profilerはデッドロックを自動的に検出してくれます。ここで、グラフ上の青(デッドロック)の部分(図8の丸数字2の個所)をダブルクリックすると、画面右にアイコン(図8の丸数字3の個所)が表示されます。このアイコンをダブルクリックすると、デッドロックが発生している部分のコードを表示することができます(図9)。
Enerjy Thread Profilerは有償のツールではありますが、いま紹介したようにスレッドダンプを取りながらスレッド動作の解析を行うのに比べると解析のコストを減らすことができます。
- これはすごい!?コード品質のカイゼン化プラグイン2種
- Mylyn&Tracでリズムに乗ってタスクを大掃除♪
- JavaScriptを書かずにAjaxを実現するjMaki
- Apache LDAP StudioでLDAPはもう怖くない
- ERダイアグラムを編集するAmaterasERDでDB設計
- Project Zeroでスクリプト+Ajaxのアジャイル開発
- お決まりコードを設計書から自動生成するblancoCsv
- EPFプラグインでらくらく開発プロセス管理!(実践編)
- EPFプラグインでらくらく開発プロセス管理!(入門編)
- バージョン管理に便利なSubversiveプラグイン
- 軽量なUMLプラグインAmaterasUML
- 簡単にFlashアプリを作成できるFlexBuilder 2
- 便利なプラグインの集大成MyEclipse
- ビルドを効率化するEclipseプラグイン
- スクリプト言語をサポートするEclipseプラグイン
- データベースの利用に便利なEclipseプラグイン
- RSSを表示できるEclipseプラグイン
- プログラミングにあると便利なプラグイン
- サンプルコードの入手をサポートするプラグイン
- 正規表現の入力・テストを行うプラグイン
- Webアプリケーション開発を支援するプラグイン
- データベース開発を支援するプラグイン
- ソフトウェアの品質向上を支援するプラグイン
- Javaのプロパティファイルを編集できるプラグイン
Copyright © ITmedia, Inc. All Rights Reserved.