リモートユーザーとして Java* アプリケーションをプロファイルする

インテル® VTune™ プロファイラー

この記事は、インテル® デベロッパー・ゾーンに公開されている「Intel® VTune™ Profiler Performance Analysis Cookbook」の「Profiling Java Applications as a Remote User」の日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。


バージョン: 2023
更新日: 2022年12月16日

インテル® VTune™ プロファイラーでラッパースクリプトを使用すると、リモートユーザーとして Java* アプリケーションをプロファイルできます。

通常、インテル® VTune™ プロファイラーを使用して実行中の Java* プロセスをプロファイルする場合、ハードウェア・ベースのサンプリング解析を実行し、ターゲットタイプとして [Attach to Process (プロセスにアタッチ)] を選択します。Linux* 環境では、インテル® VTune™ プロファイラーは Linux* perf ツールを使用してサンプリング・データを収集します。このため、Java* プロセスを実行しているユーザーと同じユーザーで、インテル® VTune™ プロファイラーを実行する必要があります。Java* プロセスを別のユーザー (root であっても) で実行すると、収集を Java* プロセスにアタッチできません。しかし、多くの場合、これらのアプリケーションは任意のアカウントで実行されるため、リモートユーザーとして実行することは困難です。

このレシピでは、ラッパースクリプトを使用してインテル® VTune™ プロファイラーを実行し、リモートユーザーとして Java* アプリケーションをプロファイルする方法を説明します。

コンテンツ・エキスパート: Jennifer Dimatteo (英語)

使用するもの

以下は、このパフォーマンス解析シナリオで使用するハードウェアとソフトウェアのリストです。

  • アプリケーション: Pi を計算するプログラム。この Java* アプリケーションはデモ用であり、ダウンロードすることはできません。このアプリケーションは、モンテカルロ・アルゴリズムを使用して、複数のスレッドで Pi の値を推定します。
  • 解析ツール: インテル® VTune™ プロファイラー 2022 以降 – ハードウェア・イベントベース・サンプリングを使用したホットスポット解析 ([Collect Stacks (スタックを収集)] オン)。

    注:
    • バージョン 2020 から、インテル® VTune™ Amplifier の名称がインテル® VTune™ プロファイラーに変わりました。
    • インテル® VTune™ プロファイラー・パフォーマンス解析クックブックの大部分のレシピは、異なるバージョンのインテル® VTune™ プロファイラーにも適用できます。バージョンにより、調整が必要になる場合があります。
    • 最新バージョンのインテル® VTune™ プロファイラーは以下から入手できます。
  • Java* 開発キット (JDK) バージョン: OpenJDK* 11.0.8 以降。
  • ローカル・オペレーティング・システム:: Windows* 10 Enterprise (Pro 版との違い)。
  • リモート・オペレーティング・システム/Amazon* マシンイメージ (AMI): Ubuntu* Server 20.04 LTS (HVM)。
  • リモート CPU/インスタンス・タイプ: AWS* EC2* c5.9xlarge (36 論理 CPU 搭載のインテル® マイクロアーキテクチャー開発コード名 Skylake)。

リモートターゲットで Java* アプリケーションを作成する

必要条件: JDK がインストールされていることを確認してください。

  1. Java* ファイルを作成します。この例では、main (while(true)) の本体に無限ループを追加し、長時間実行するプロセスをシミュレートしています。
    *Pi.java*
  2. Java* ファイルをシンボル付きでコンパイルします。
    $ javac -g Pi.java 

リモートユーザーとして Java* アプリケーションを実行する

SSH ユーザーではないユーザーで Java* アプリケーションを起動します。この例では、AWS* インスタンスのデフォルトユーザーが ubuntu なので、アプリケーションを実行するユーザー (intel) を新規作成します。

$ sudo adduser intel 
$ su intel
$ java -Xcomp -Djava.library.path=native_lib/ia32 -cp ./ Pi

ユーザー intel が Java* プロセスを実行していることを確認します。プロセスの ID をメモします。

$ top

Java* プロセスの ID をメモする

リモート収集向けにローカルマシンでインテル® VTune™ プロファイラーを設定する

  1. ローカルマシンでインテル® VTune™ プロファイラーの GUI を開きます。
  2. [WHERE (どこを)] ペインで [Remote Linux (SSH) (リモート Linux* (SSH))] を選択します。
  3. ターゲットシステムの SSH 接続先を、Java* アプリケーションを実行しているユーザーとは別のユーザーで設定します。この例では、SSH ユーザーは ubuntu です。
  4. インテル® VTune™ プロファイラーのターゲットパッケージを展開します。

  5. [WHAT (何を)] ペインで [Attach to Process (プロセスにアタッチ)] を選択します。
  6. Java* アプリケーションのプロセス ID を入力します。

インテル® VTune™ プロファイラーのコレクターを実行するラッパースクリプトを作成する

  1. テキストエディターを使用して、vtune_wrapper.sh という名前のファイルを作成します。
  2. ラッパーファイルに以下のテキストを追加します。
    #!/bin/bash
    echo "Target result dir: $VTUNE_RESULT_DIR"
    chmod -R o+w $VTUNE_TEMP_DIR
    chmod -R o+w $VTUNE_RESULT_DIR
    sudo -A -u intel "$@"
    sudo -A chown -R ubuntu $VTUNE_RESULT_DIR
    
  3. [WHAT (何を)] ペインの [Advanced (詳細)] セクションで [Wrapper script (ラッパースクリプト)] テキストボックスにスクロールダウンします。
  4. vtune_wrapper.sh を選択します。
  5. テキストボックス内で、最終行の末尾にカーソルを置いて、Enter キーを押して改行を追加します。こうすることで、収集が確実にスクリプトを認識するようにします。

    ラッパースクリプト

  6. [Advanced (詳細)] セクションで [Automatically stop collection after (sec) (指定時間後に収集を自動停止 (秒))] オプションにスクロールアップします。このオプションをオンにして、開始から 30 秒後に収集を停止するように、値を 30 に設定します。

ハードウェア・イベントベース・サンプリングとスタック収集を使用したホットスポット解析を実行する

  1. [HOW (どのように)] ペインで [Algorithm (アルゴリズム)] グループから [Hotspots (ホットスポット)] 解析タイプを選択します。
  2. [Hardware Event-Based Sampling (ハードウェア・イベントベース・サンプリング)] をオンにします。
  3. [Collect stacks (スタックを収集)] オプションをオンにして、[Stack size (スタックサイズ)] を 4096 に設定します。

  4. [Start (開始)] をクリックして、解析を開始します。

解析結果を確認する

収集が完了すると、[Summary (サマリー)] タブに、CPU パフォーマンス情報とアプリケーションで見つかったホットスポットのリストが表示されます。デバッグ情報の場所に関する Collection Log の警告は無視できます。

ホットスポット情報と CPU パフォーマンス・データが表示された [Summary (サマリー)] タブ

関連情報

Node.js* の JavaScript* コードのプロファイル
CPU 利用率の問題のホットスポット解析 (英語)
フレームグラフを使用してホットなコードパスを解析する

iSUS ではインテル® VTune™ プロファイラーの日本語化パッケージを提供しています。この機会にぜひご利用ください。

インテル® VTune™ プロファイラー・パフォーマンス解析クックブックのトップに戻る


製品および性能に関する情報

1 性能は、使用状況、構成、その他の要因によって異なります。詳細については、http://www.intel.com/PerformanceIndex/ (英語) を参照してください。

タイトルとURLをコピーしました