Java アプリケーションの動的解析ツール


JProfiler は、CPU、メモリ、スレッドを解析し、Java アプリケーションのパフォーマンスにおけるボトルネック解析、メモリ リークの検出、スレッド問題の検出を可能にします。


jprofiler image

JProfiler

Java アプリケーション解析ツールの決定版

JVM でのアプリケーションの解析に JProfiler が選ばれるのには理由があります。


抜群の使いやすさ

アプリケーションの解析には、頼れるツールが必要です。その一方で、ツールを習得するために多大な時間を費やすことは望ましくありません。 JProfiler は、そのどちらの条件をも兼ね備えた、シンプルでいてパワフルなツールです。セッション構成はいたって簡単、サード パーティー統合も可能で、データの解析結果も自然に表現されます。 JProfiler は、あらゆるレベルでの問題解決に役立つよう、慎重に設計されています。

JDBC、JPA、および NoSQL のデータベース解析

ビジネス アプリケーションにおけるパフォーマンス上の問題の主な理由は、データベースの呼び出しです。JProfiler の JDBC プローブや JPA/Hibernate プローブ、MongoDB、Cassandra、HBase 用の NoSQL プローブでは、データベース アクセスの遅延や コードからデータベースの呼び出しの遅延などの問題を表示します。JDBC のすべてのアクティビティと接続を表示するタイムライン ビューから、ステートメントの遅延を表示するホットスポット ビュー、テレメトリ ビュー、シングル イベントの 一覧にいたるまで、データベース プローブはデータベース レイヤーの分析に必要不可欠なツールです。

Java EE のサポート

JEE の機能は、JProfiler のほとんどのビューで表示されます。たとえば、JEE アグリゲーション レベルでは、 アプリケーション内の JEE コンポーネントのコール ツリーを確認できます。さらに、CPU プロファイリング ビューで表示する JDBC、JPA/Hibernate、JMS や JNDI コールなど低レベルの解析データの上位のセマンティック レイヤーを追加します。 JEE のサポートで、コード プロファイラーと高レベルな JEE モニタリング ツール間のギャップを繋ぎます。


高レベルな解析データ

JProfiler では、JRE のサブシステムからより高レベルなデータを表示する多くのプローブを提供します。 JDBC、JPA/Hibernate、JSP/Servlet、JMS、Web サービスや JNDI などの Java EE サブシステムに加え、 JProfiler では、RMI コール、ファイル、ソケットやプロセスなど高レベルな情報も表示します。これらの各プローブでは、 一般的な分析やパフォーマンスの問題のハイライトなど有効なビューで、シングル イベントをトレースします。 さらに、これらのビューは、JProfiler 内でオンザフライで設定できる独自のカスタム プローブでも利用可能です。

メモリ リークの解析

適切なツールなしでは、メモリ リークの発見はほぼ不可能といえます。JProfiler のヒープ ウォーカー機能は、直感的なインターフェイスで複雑なメモリーの問題も解決します。5 つの異なるビューで、オブジェクトのセットを さまざまな要素から分析します。各ビューでは、選択したオブジェクトの分析や異なるオブジェクト セットへの切り替えができます。

QA 機能の活用

JProfiler は、開発だけではなく QA ツールとしても利用できます。豊富な機能でスナップショットを比較し、問題を追跡します。 コマンドライン操作も強力にサポートしており、コマンドラインからスナップショット データのエクスポートや比較を作成できます。 JProfiler にバンドルされている Ant タスクでは、ビルド スクリプトからすべてのコマンド ライン操作を実行できます。


プラットフォーム、IDE、アプリケーション サーバーを幅広くサポート

JProfiler は、幅広いプラットフォーム (32bit / 64bit JVM) 用のネイティブ エージェント ライブラリを提供しています。 一般的な IDE への統合で、アプリケーションの開発時にプロファイリングが簡単に実行できます。 ほぼすべての一般的なアプリケーション サーバーで統合ウィザードを使用して、ドキュメントを参照することなくわずか数クリックで開始できます。

オーバーヘッドの削減

JProfiler では、必要な時にだけデータを記録できます。JProfiler エージェントでアプリケーションを開始し、 後に JProfiler GUI を追加することができます。データを記録しない場合には、オーバーヘッドはわずかになります。 これこそオンデマンド プロファイリングです。高度なプロファイラー設定では、多くの設定を調整できます。 プロファイリング設定がどの程度パフォーマンスに影響するか表示し、また、通常の使用にはテンプレートを使用して迅速にプロファイリング設定を選択できます。

パワフルな CPU 解析プロファイラー

パフォーマンス ボトルネックの解消は、解析ツールの使用例の際たるものです。しかし、CPU データの詳細は圧倒的な レベルであるため、データ収集方法によってはユーザビリティに大きく影響します。JProfiler を使用することで、 コール ツリー ビューのフィルター、集約レベル、スレッド ステータス セレクターなど、問題の原因追求において決定的な利点があります。


スレッド プロファイラーの統合

スレッドの問題は、想像以上に頻繁に発生します。スレッド プロファイラーなくしては、これらの問題を解決に導くことは きわめて困難であるといえます。JProfiler では、ロックを使い過ぎているマルチスレッド アプリケーションのパフォーマンスを 活性化するなど、他のツールでは解決できない問題を処理できます。別のビューでスレッド プロファイリングを表示するだけでなく、 CPU プロファイリングとも統合できます。

サポートされるプラットフォーム

Windows
macOS
Linux
FreeBSD
Solaris
AIX
HP-UX


JProfiler - 特長

JProfiler は、以下の操作モードをサポートしています。

  • ローカル セッションの動的解析

    アプリケーションの起動方法を定義すると、JProfiler でプロファイリングできるようになり、JVM のライブ データがすぐに表示されます。 セッション構成は不要で、IDE プラグインを介してお気に入りの IDE からアプリケーションを解析できます。

  • リモート セッションの動的解析

    java start コマンドの VM パラメーターを変更すると、Java アプリケーションで JProfiler GUI からの接続をリッスンできます。 プロファイリングされるアプリケーションは、ローカル コンピューター上で実行できるだけでなく、JProfiler をネットワーク経由で アプリケーションにアタッチすることもできます。さらに、JProfiler は、プロファイリングするアプリケーションの設定に、 あらゆる主要なアプリケーション サーバー用の統合ウィザードを提供します。

  • オフライン解析とトリガー

    プロファイリングの際には、JProfiler GUI をアプリケーションに接続する必要はありません。 オフライン解析機能では、 JProfiler のパワフルなトリガー システムか API を使用してプロファイリング エージェントを制御し、 スナップショットをディスクに保存できます。後でJProfiler GUI でこれらのスナップショットを開くか、コマンド ライン エクスポート ツールまたはエクスポート ant タスクを使用してプロファイリング ビューをプログラムでエクスポートすることもできます。

  • スナップショットの比較

    JProfiler では、現行の解析データのスナップショットをディスクに保存できます。 2 つ以上のスナップショット間での変更箇所を確認できる比較機能があります。また、 コマンド ライン比較ツールか比較 ant タスクを使用してプログラムで比較レポートを作成することもできます。

  • HPROF スナップショットの表示

    JProfiler では、jconsole や jmap などの JVM ツールや、-XX:+ HeapDumpOnOutOfMemoryError JVM パラメーターによって トリガーされた HPROF スナップショットを開くことができます。

  • リクエスト トラッキング

    リクエスト トラッキングという革新的なコンセプトにより、並列およびマルチスレッド プログラミングの解析がとても簡単になります。リクエスト トラッキングは、コール ツリー ビュー内のハイパーリンクを使用して、 異なるスレッド間の実行サイトに呼び出しサイトを接続します。以下のマルチスレッド システムを追跡できます。

    • java.util.concurrent パッケージの実行プログラム
    • AWT イベント
    • SWTイベント
    • スレッド開始

    さらに、両方の JVM がプロファイルされ、JProfiler で開いている場合、JVM 境界をまたいで呼び出しを追跡できます。 以下のリモート呼び出しを追跡することができます。

    • RMI 呼び出し
    • Web サービス呼び出し
    • リモート EJB 呼び出し
  • カスタム プローブの作成

    JProfiler では、JProfiler GUI でカスタム プローブを直接定義できる、カスタム プローブ ウィザードを提供しています。 カスタム プローブは、JProfiler が解析を行うアプリケーションにデプロイされ、カスタム プローブの変更または 追加時にアプリケーションを再起動する必要はありません。

以下では、JProfiler のプロファイリング ビューの概要を紹介します。

メモリ プロファイリング

JProfiler のメモリ ビュー セクションには、メモリ使用量に応じて動的に更新されるビューと、アロケーション ホット スポットに関する情報を表示するビューがあります。すべてのビューには複数の集約レベルがあり、ライブ オブジェクトとガベージ コレクトされるオブジェクトを表示します。

All objects
(すべてのオブジェクト)
ヒープ上のすべてのオブジェクトのクラスまたはパッケージにおけるインスタンス数とサイズ情報を表示します。現行の値をマークして差分を表示できます。
Recorded objects
(記録されたオブジェクト)
すべての記録されたオブジェクトのクラスまたはパッケージを表示します。現行の値をマークして差分を表示できます。
Allocation call tree
(アロケーション コール ツリー)
選択したクラスのコール ツリー、メソッド、クラス、パッケージ、または JEE コンポーネントのアロケーションを表示します。
Allocation hot spots
(アロケーション ホット スポット)
選択したクラスのメソッド、クラス、パッケージ、または JEE コンポーネントのアロケーション一覧を表示します。現行の値をマークして差分を表示できます。各ホット スポットについて、バックトレースのツリーが表示されます。
Class tracker
(クラス トラッカー)
選択したクラスのインスタンス数のグラフでタイム ラインを表示します。

ヒープ ウォーカー

JProfiler のヒープ ウォーカーでは、ヒープのスナップショットを撮り、選択ステップを実行して対象のオブジェクトにドリルダウンできます。 ヒープ ウォーカーには以下の 5 つのビューがあります。

Classes
(クラス)
すべてのクラスとそのインスタンスを表示します。
Allocations
(アロケーション)
記録されたオブジェクトのアロケーション ツリーとアロケーション ホット スポットを表示します。
Biggest objects
(最大オブジェクト)
ヒープの最大部分のガベージ コレクションをブロックするオブジェクトを表示します。ドミネーター ツリーを展開してこれらのオブジェクトを表示できます。
References
(リファレンス)
参照する個々のオブジェクトとプリミティブ データ、参照されるオブジェクトと [Show Paths To GC Root] (ガベージ コレクター ルートへのパスを表示) 機能を表示します。また、参照されるオブジェクトおよび参照するオブジェクトの累積ビューも表示します。参照するオブジェクト ビューでは、フィルターが適用できます。フィルターは、プリミティブ値によるフィルタリングと、スクリプトによるフィルタリングの二種類があります。
Data
(データ)
個々のオブジェクトのインスタンスおよびクラス データを表示します。
Time
(時間)
記録されたオブジェクトの時間分解ヒストグラムを表示します。
Inspections
(インスペクション)
インスペクション ビューでは、多様な方法で現行のオブジェクト セットを解析するさまざまな検査を実行できます。
Graph
(グラフ)
グラフでは、異なるオブジェクト セットからのオブジェクトを追加し、参照されるオブジェクト、参照するオブジェクトを開き、選択したオブジェクト間のパスを検索し、カベージ コレクタールートへのパスを表示してその関係を探索できます。

CPU プロファイリング

JProfiler では、パフォーマンスを最適化するためにさまざまな方法でコール ツリーを記録できます。すべてのビューにおいて、スレッド、スレッド グループ、およびスレッド ステータスが選択できます。すべてのビューは、メソッド、クラス、パッケージ、JEE コンポーネントのそれぞれのレベルで集約できます。CPU プロファイリングには、以下のビューがあります。

Call tree
(コール ツリー)
JVM に記録されたすべての呼び出しシーケンスのトップダウン ツリーを累積して表示します。JDBC、JMS、および JNDI のサービス コールは、コール ツリーにアノテートされます。コール ツリーは、サーブレットまたは JSP への異なる要求 URL に対して分割できます。[Exceptional method run recording] (例外的なメソッドの実行記録) をマークして、最も遅い呼び出しを個別に表示することができます。リクエスト トラッキングでは、マルチスレッド アプリケーションの呼び出しサイトを実行サイトに接続できます。
Hot spots
(ホット スポット)
最も時間を要するメソッドの一覧を表示します。各ホット スポットにおいて、バックトレースのツリーを表示できます。
Call graph
(コール グラフ)
選択したメソッド、クラス、パッケージ、または JEE コンポーネントから始まる呼び出しシーケンスのグラフを表示します。
Method statistics
(メソッドの統計)
外れ値を発見するために使用できる、呼び出し時間の分布グラフとともに、すべてのメソッドの呼び出し時間の分布に関する統計情報を表示します。
Call tracer
(コール トレーサー)
スレッド、パッケージ、およびクラスごとにグループ分けされたメソッド呼び出しの時系列トレースを表示します。

スレッド プロファイリング

スレッド プロファイリングには、以下のビューがあります。

Thread history
(スレッドの履歴)
スレッドのアクティビティとステータスのタイム ラインを表示します。
Thread monitor
(スレッド モニター)
ライブのスレッドにおける現行のアクティビティ一覧を表示します。
Thread dumps
(スレッド ダンプ)
複数のスレッド ダンプを解析できます。

モニター プロファイリング

モニター プロファイリングには、以下のビューがあります。

Current locking graph
(ロック グラフ)
JVM におけるすべての待機中およびブロック中の状況のグラフを表示します。
Current monitors
(進行中のモニター)
使用中のモニターおよびその関連スレッドを表示します。
Locking history graph
(ロック履歴グラフ)
記録された待機およびブロック状況の履歴をグラフで表示します。
Monitor history
(モニターの履歴)
記録された待機イベントとブロック イベントの履歴を表示します。
Monitor usage statistics
(モニター使用率の統計)
モニター、スレッド、モニターのクラス別にグループ分けされたモニターの統計を表示します。

VM テレメトリ

JVM の内部状態をモニタリングするために、テレメトリには以下のビューがあります。

Heap
(ヒープ)
使用済みのメモリの量とサイズのグラフでタイム ラインを表示します。
Recorded objects
(記録されたオブジェクト)
記録されたライブ オブジェクトおよび配列のグラフでタイム ラインを表示します。
Recorded throughput
(記録されたスループット)
記録されたオブジェクトにおけるオブジェクト生成とガベージ コレクションの比率のグラフでタイム ラインを表示します。
GC activity (GC アクティビティ)
ガベージ コレクター アクティビティのグラフでタイム ラインを表示します。
Classes
(クラス)
ロードされるクラスのグラフでタイム ラインを表示します。
Threads
(スレッド)
アクティブなスレッドのグラフでタイム ラインを表示します。
CPU load
(CPU 負荷)
プロファイルするアプリケーションが生成する CPU 負荷のグラフでタイム ラインを表示します。

データベース

JProfiler は、以下のデータベースの特定のプローブをサポートしています。

  • JDBC
  • JPA/Hibernate
  • MongoDB
  • Cassandra
  • HBase

JEE およびプローブ

JProfiler には以下のプローブがあります。

  • JDBC
  • JPA/Hibernate
  • JMS
  • JNDI
  • RMI
  • Web サービス
  • サーブレット
  • ファイル
  • ソケット
  • プロセス

プローブでは、次の情報が表示されます。

Time line
(タイム ライン)
タイム ラインビューでは、プローブは時間軸に沿ってコントロール オブジェクトをカラー バーとして表示します。コントロール オブジェクトは、単一のプローブ イベントに関連付く長命オブジェクトです。たとえば、JDBC プローブでは、コントロール オブジェクトはデータベース接続です。タイム ライン バーの色は、コントロール オブジェクトの状態に対応しています。
Control objects
(コントロール オブジェクト)
コントロール オブジェクトに関する表形式の詳細は、コントロー ルオブジェクト ビューに表示されます。ファイル I/O の合計スループットなど、記録されるイベントの統計情報と同様に、コントロー ルオブジェクトに関する詳細が表示されます。フィルター コントロールと下部の合計ラインにより、コントロール オブジェクトのサブセットをすばやく集計できます。一部のプローブについては、入れ子の表に詳細が表示され、興味深い複数行の値をより詳しく表示するダイアログを開くことができます。たとえば、プロセスのコマンド ライン パラメーターは、非常に長い場合があります。
Hot spots
(ホット スポット)
ホット スポット ビューでは、実行時間で並べ替えられたプローブ イベントによって発行される、ペイロード名のホット スポットを表示します。たとえば、ファイル プローブにはファイル名、JDBC プローブには SQL 文字列、JNDI プローブにはクエリがそれぞれ表示されます。各ホット スポットを展開し、ホット スポットに属するバック トレースを表示できます。
Telemetries
(テレメトリ)
テレメトリ ビューでは、プローブの公開するさまざまなテレメトリが表示されます。
Events
(イベント)
イベント ビューには、プローブが記録する単一のイベントが表示されます。イベントにはスレッドとスタックのトレース情報があり、関連するコントロール オブジェクトに簡単にジャンプできます。この場合も、フィルターと合計行によって、選択したイベントの合計が得られます。

JProfiler - システム要件

プラットフォーム

JProfiler は、以下のプラットフォームでのプロファイリングをサポートしています。

OS アーキテクチャ サポートされる JVM
Windows 11、10、8、7
Windows Server 2022、2019、2016、2012
x86
x64/AMD64
Hotspot 1.5 - 18
IBM/OpenJ9 1.5 - 18
macOS 10.12 - 12 Intel、Apple Hotspot 1.7 - 18
OpenJ9 1.8 - 18
Linux x86
x64/AMD64
Hotspot 1.5 - 18
IBM/OpenJ9 1.5 - 18
Linux PPC
PPC64
PPC64LE
IBM/OpenJ9 1.5 - 18
Linux ARMv7
ARMv8
Hotspot 1.6 - 18
FreeBSD 12、13 x86
AMD64
FreeBSD 1.5 - 18
AIX 7.1 - 7.3 PPC
PPC64
IBM/OpenJ9 1.5 - 18

JProfiler GUI のフロントエンド実行には、Java 11 VM が必要です。アタッチ コマンド ライン ツールの jpenable、jdump および jpcontroller には、Java 6 VM が必要です。

IDE

JProfiler は以下の IDE に統合できます。

IDE windows linux Unix macOS
eclipse
IntelliJ IDEA
NetBeans IDE

IntelliJ IDEA との統合は、Fuhrer Engineering の IDEA プラグイン スペシャリストによって ej-technologies 専用に開発されました。 EAP ビルドに関しては、JProfiler の新バージョンのプラグインが利用可能か IDEA プラグイン マネージャーで確認してください。


抜群の使いやすさ

JProfiler は、上記の IDE に簡単に統合できます。セットアップ ウィザードを使用するか、

[General Settings] ダイアログで IDE を選択します。



アプリケーション サーバー

JProfiler のアプリケーション サーバー統合ウィザードは、以下を含む多数の Java EE アプリケーション サーバーをサポートします。

アプリケーション サーバー windows linux Unix macOS
Adobe Coldfusion MX 8、9、10、11
Apache Geronimo 1.x、2.x、3.x
Apache Tomcat 5.x、6.x、7.x、8.x、9.x、10.x
Caucho Resin 3.x、4.x
Eclipse Virgo 2.x、3.x
Glassfish V1、V2、V3、4.x、5.x
IBM Websphere 6.x、7.x、8.x、9.x
JBoss 4.x、5.x、6.x、7.x
Wildfly
Jetty 5.x、6.x、7.x、8.x、9.x、10.x
ObjectWeb Jonas 5.x
Oracle WebLogic Server 9.x、10.x、11g、12c、14c

"Other application server" (その他のアプリケーション サーバー) を選択して手順に従うと、その他多数の Java アプリケーションでもプロファイリングできます。


抜群の使いやすさ

JProfiler は、上記の Java EE アプリケーション サーバーと 簡単に統合できます。 Start Center から統合ウィザードを起動し、指示に従います。

これで統合完了です。



JProfiler - ドキュメント

JProfiler のドキュメント

JProfiler 日本語版スタート ガイド

マニュアルを印刷、オフライン表示、またはモバイル デバイスで入手する場合は、PDF 形式でダウンロードできます。

JProfiler HTML ヘルプ

JProfiler の使用に関する質問は、オンライン ヘルプ システムをご参照ください (英語)。

※Google Chrome で開き、右クリックのコンテキスト メニューから、[日本語に翻訳 (T)] を選択することで、機械翻訳された日本語で閲覧できます。

JProfiler PDF マニュアル

マニュアルを印刷、オフライン表示、またはモバイル デバイスで入手する場合は、PDF 形式でダウンロードできます (英語)。



ページトップへ