インテル® VTune™ プロファイラー・ユーザーガイド

Java* コードの解析

インテル® VTune™ プロファイラーを使用して、Oracle* や OpenJDK* (Linux* のみ) で実行される Java* アプリケーションを解析します。

Java* コードの実行はマネージドランタイム環境で制御されても、ネイティブ言語で記述されたプログラムと同様に、データ管理の面では効率が悪くなることがあります。例えば、データマイニング Java* アプリケーションのパフォーマンスを意識するのであれば、ターゲット・プラットフォームのメモリー・アーキテクチャー、キャッシュ階層、メモリーレベルへのアクセス・レイテンシーを考慮する必要があります。プラットフォームのマイクロアーキテクチャーという点で見ると、Java* アプリケーションのプロファイルはネイティブ・アプリケーションのプロファイルに似ていますが、大きな違いが 1 つあります。それは、プログラムのソースコードに対するパフォーマンス・メトリックを確認するには、プロファイル・ツールは JVM* でコンパイルまたは解釈されたバイナリーコードのメトリックを、オリジナルの Java* または C/C++ ソースコードにマップできなければならない点です。

インテル® VTune™ プロファイラーは、JIT コンパイル済みコードの低オーバーヘッド解析を実行できます。これは、ユーザーモード・サンプリングとトレース、およびハードウェア・イベントベース・サンプリング解析の両方のタイプでサポートされます。解釈された Java* メソッドの解析は制限されます。

インテル® VTune™ プロファイラーで Java* コードの解析を有効にしてデータを解釈するには、次の操作を行います。

Java* データ収集を設定

Java* コード向けにパフォーマンス解析を設定するには、GUI またはコマンドライン (vtune) 設定のいずれかを使用します。次のモードを使用して Java* コードの解析を行います。

[アプリケーションを起動] モードで、Java* 解析を設定します。

  1. バッチファイルや実行可能なスクリプトに java* コマンドを埋め込みます。

    例えば、Windows* 上で run.bat ファイルを作成するか、Linux* で run.sh ファイルを作成し、それぞれ次のコマンドを埋め込みます。

    Windows*:

    > java.exe -Xcomp -Djava.library.path=native_lib\ia32 -cp C:\Design\Java\mixed_stacks MixedStacksTest 3 2

    Linux* :

    $ java -Xcomp -Djava.library.path=native_lib/ia32 -cp /home/Design/Java/mixed_stacks MixedStacksTest 3 2

  2. プロジェクトを作成します。

  3. [解析の設定] ウィンドウから、[どこを] ペインを選択し、解析システム (例えば、[ローカルホスト]) を指定します。

  4. [何を] ペインで、[アプリケーションを起動] ターゲットタイプを選択します。

  5. [アプリケーション] フィールドで run ファイルへのパスを指定します。
    Linux* の例:

  6. [高度] セクションで、マネージドコードのプロファイル・モード[自動] に設定して、[子プロセスを解析] オプションを有効にします。

同様に、インテル® VTune™ プロファイラーのコマンドライン・インターフェイス vtune で解析を設定することもできます。例えば、Linux* のホットスポット解析では、次のコマンドを実行します。

$ vtune -collect hotspots -- run.sh

または

$ vtune -collect hotspots -- java -Xcomp -Djava.library.path=native_lib/ia32 -cp home/Design/Java/mixed_stacks MixedStacksTest 3 2

[プロセスにアタッチ] モードで Java* 解析を設定

Java* アプリケーションをしばらく実行する場合や、解析を開始するときに起動できない場合、インテル® VTune™ プロファイラーをスタンドアロンの Java* プロセスにアタッチすることができます。Linux* では、ハードウェア・イベントベース・サンプリング解析タイプの組込み JVM* インスタンスを使用して、インテル® VTune™ プロファイラーを C/C++ アプリケーションにアタッチできます。これを有効にするには、[何を] ペインで [プロセスにアタッチ] ターゲットタイプを選択して、java* プロセス名または PID を指定します。

コマンドライン・インターフェイスを使用して、解析を Java* プロセスにアタッチすることもできます。例えば、次のコマンドはホットスポット解析を Java* プロセスにアタッチします。

$ vtune -collect hotspots -target-process java

次のコマンドラインの例は、ホットスポット解析を PID を使用して Java* プロセスにアタッチします。

$ vtune -collect hotspots -target-pid 1234

動的なアタッチのメカニズムは、Java* 開発キット (JDK) でのみサポートされます。

低い権限のアカウントで [プロセスにアタッチ] モードの Java* 解析を設定 (Linux* のみ)

ハードウェア・イベントベース・サンプリング解析タイプでは、管理者権限で実行するインテル® VTune™ プロファイラーを、低い権限レベルのユーザーアカウントで実行される Java* プロセスや JVM* インスタンスが組み込まれた C/C++ アプリケーションへアタッチすることができます。例えば、インテル® VTune™ プロファイラーを Java* ベースのデーモンやサービスにアタッチしてプロファイルできます。

これには、root 権限でインテル® VTune™ プロファイラーを起動し、[プロセスにアタッチ] ターゲットタイプを選択して、java* プロセス名または PID を指定します。

最もホットなメソッドを特定

ホットスポット解析を使用すると、最もホットなメソッドのリストとタイミングメトリックおよびコールスタックが表示されます。スレッドのワークロード分布も [タイムライン] ペインに表示されます。スレッドに名前を付けると、最もリソースを消費しているコードがどこで実行されたかを特定するのに便利です。
Linux* の例:

混在コードのスタックを解析

プラットフォームにおける最高のパフォーマンスを目指すため、Java* プロジェクトのパフォーマンス・クリティカルなモジュールを、C やアセンブリーのようなネイティブ言語で記述してコンパイルする手法を用いることがあります。このプログラミング手法を用いることで、ベクトル・コンピューティング (SIMD ユニットと命令セットにより実装) のような強力な CPU リソースを使用することができます。この場合、大部分の処理を行うことが期待される、計算を多用する関数がホットスポットとしてプロファイル結果に表示されます。しかし、ホットスポット関数だけでなく、それらの関数が JNI インターフェイスで呼び出さ経由 Java* コードの位置を特定したいこともあります。混在言語のアルゴリズム実装におけるクロスランタイム呼び出しのような処理をトレースすることは課題の 1 つです。

混在コードのプロファイル結果を解析するため、インテル® VTune™ プロファイラーは、Java* のコールスタックと後続の C/C++ 関数のネイティブなコールスタックを「スティッチ」します (1 つにまとめます)。逆のコールスタックのスティッチも同様に行われます。
Windows* の例:

ネイティブ関数

ネイティブ/Java* 混在コールスタック

ネイティブモジュール

Java* コールスタックのコンパイル済みメソッド

コンパイル段階のインライン展開により、デフォルトでは一部の関数がスタックに表示されないことに注意してください。フィルターバーの [インラインモード] で、[インライン関数を表示] オプションが選択されていることを確認してください。

ハードウェア・メトリック解析

インテル® VTune™ プロファイラーはまた、プラットフォームの CPU マイクロアーキテクチャー向けに Java* アプリケーションを最適化する高度なプロファイル・オプションを提供します。Java* や JVM* テクノロジーは、ハードウェア・アーキテクチャー固有のコーディングから開発者を解放するように意図されているため、Java* コードが現在のインテル® アーキテクチャー向けに最適化されれば、将来の世代の CPU でも、おそらくこの利点は維持されます。ハードウェア・イベントベース・サンプリングによるデータ収集を使用して、CPU のパイプラインのハードウェア・イベントをモニターし、CPU の効率良い命令実行を制限するコードの過ちを特定します。CPU メトリックは、アプリケーションのモジュール、関数、Java* コードのソース行に対応して表示することができます。また、スタックを含むハードウェア・イベントベースのサンプリング収集を利用できます。ドライバーやシステムのミドルウェア層で呼び出された関数の呼び出しパスを調べる必要があるときに役立ちます。

制限事項

インテル® VTune™ プロファイラーは、制限付きで Java* アプリケーションの解析をサポートします。

関連情報