インテル® VTune™ Amplifier 2018 ヘルプ

Java* コードの解析

インテル® VTune™ Amplifier を使用して Oracle* JDK または OpenJDK* (Linux* のみ) で実行される Java* アプリケーションを解析します。

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

インテル® VTune™ Amplifier は、ユーザーモードのサンプリングおよびトレースと、ハードウェア・イベントベース・サンプリング解析タイプの両方で、低オーバーヘッドの JIT コンパイルされたコードの解析が可能です。インタープリターで処理される Java* メソッドの解析は、制限されます

インテル® VTune™ Amplifier とインタープリターによる Java* コードの解析を有効にするには、次の操作を行います。

Java* データ収集の設定

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

アプリケーションを起動

1 つの方法として、バッチファイルや実行可能なスクリプトで java コマンドを指定する方法があります。例えば、次のコマンドを実行する run.bat ファイル (Windows*) または、run.sh ファイル (Linux*) を作成します。

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

そして、インテル® VTune™ Amplifier のプロジェクト設定で、起動するアプリケーションとしてこの run ファイルへのパスを指定します。例えば、Linux* では次のようになります。

また、[Managed code profiling mode (マネージドコードのプロファイル・モード)][Auto (自動)] を設定し、[Analyze child processes (子プロセスを解析)] オプションを選択します。

同様に、インテル® VTune™ Amplifier のコマンドライン・インターフェイス amplxe-cl でも解析を設定できます。例えば、Linux* 上で基本ホットスポット解析を行うには、次のコマンドラインを実行します。

> amplxe-cl -collect hotspots -- run.sh

または、次のように直接入力します。

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

プロセスにアタッチ

Java* アプリケーションをしばらく実行する必要がある場合や、解析を開始する時点で起動できない場合、インテル® VTune™ Amplifier をスタンドアロンの Java* プロセスにアタッチすることもできます。Linux* では、ハードウェア・イベントベース・サンプリング解析タイプ向けに、インテル® VTune™ Amplifier を JVM インスタンスが組み込まれた C/C++ アプリケーションにアタッチすることができます。これには、[Attach to Process (プロセスにアタッチ)] ターゲットタイプを選択し、Java* プロセス名または PID を指定します。

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

> amplxe-cl -collect hotspots -target-process java

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

> amplxe-cl -collect advanced-hotspots -target-pid 1234

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

低特権レベルのアカウントで実行されるプロセスにアタッチ (Linux* のみ)

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

これを行うには、インテル® VTune™ Amplifier を root アカウントで実行し、[Attach to Process] ターゲットタイプを選択して Java* プロセス名や PID を指定します。

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

インテル® VTune™ Amplifier の基本ホットスポット解析を使用すると、最もホットなメソッドのリストとタイミングメトリックおよびコールスタックが表示されます。また、[Timeline (タイムライン)] ペインには、それぞれのスレッドに分散されるワークロードも表示されます。スレッドに名前を付けると、最もリソースを消費しているコードがどこで実行されたかを特定するのに便利です。

言語が混在するコードのスタック解析

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

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

ネイティブ関数

ネイティブと Java* が混在した呼び出しスタック

ネイティブモジュール

Java* 呼び出しスタックでコンパイルされたメソッド

コンパイル段階のインライン展開により、一部の関数はスタックに表示されない場合があることに注意してください。フィルターバーの [Inline Mode (インライン展開モード)][Show inline functions (インライン展開された関数を表示)] オプションを選択するのを忘れないでください。

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

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

制限事項

インテル® VTune™ Amplifier の Java* アプリケーション解析には、いくつかの制限事項があります。

関連情報