問題点

YourKit Java profiler プロファラーを設定して、CQ3.x または CQ4.x を作動するには?

解決策

YourKit のインストール

  1. OS 用の YourKit エージェントをダウンロードします(ページの下部にあるリンクを参照)。

  2. YourKit プロファイラーをインストールします。

  3. YourKit のプロファイラーを起動します(JDK 1.5はプロファイラーを実行する際に必要です)。

    • Windows:スタートメニューから「Java プロファイラーの起動」をローンチします。
    • Linux、Solaris:YourKit Java プロファイラー Home > /bin/yjp.sh を実行します。
    • Mac OS X:ダウンロードされたアプリケーションが解凍されたら、そのアイコンをクリックします。

プロファイリングを有効にする

IDE または J2EE サーバーに直接プロファイリングを有効にすることができます。ただし、IDE または J2EE の独立したサーバでなので、手動でプロファイリングを有効にしたほうが効率的な場合があります。手順は、各 OS によって異なります。

OS アクション
Windows、32ビット Java <!YourKit Java Profiler Home>\bin\win32 をパスに追加
Windows、64ビット Java <!YourKit Java Profiler Home>\bin\win-amd64 をパスに追加
Mac OS X <!YourKit Java Profiler Home>/bin/mac to the DYLD_LIBRARY_PATH を追加
Linux x86、32ビット Java <!YourKit Java Profiler Home>/bin/linux-x86-32 to the LD_LIBRARY_PATH を追加
Linux AMD64、64ビット Java <!YourKit Java Profiler Home>/bin/linux-amd64 to the LD_LIBRARY_PATH を追加
32ビット版の Java、Solaris- SPARC <!YourKit Java Profiler Home>/bin/solaris-sparc-32 to the LD_LIBRARY_PATH を追加
Solaris- SPARC、64ビット Java <!YourKit Java Profiler Home>/bin/solaris-sparc-64 to the LD_LIBRARY_PATH を追加
Solaris x86、32ビット Java <!YourKit Java Profiler Home>/bin/solaris-x86-32 to the LD_LIBRARY_PATH を追加
Solaris x86、64ビット Java(AMD64) <!YourKit Java Profiler Home>/bin/solaris-x86-64 to the LD_LIBRARY_PATH を追加

プロファイラーエージェントの確認

Java がプロファイラーエージェントを読み込むかどうかを確認するには、エージェントパラメーターの説明を印刷する次のコマンドを呼び出すことができます。

  • Java 5 或いは 6
    • java -agentlib:yjpagent=help
  • Java 1.3 或いは 1.4
    • java -Xrunyjpagent:help

アプリケーションのエージェントライブラリの統合

Java アプリケーションをプロファイリングするには、YourKit ツールを Java アプリケーションのインターフェースへ提供する必要があります。YourKit エージェントライブラリを、プロファイルするターゲットアプリケーションが実行されている JVM に統合します。最初に、JVM が実行されている各 OS エージェントライブラリのパスを指定して、プロファイリングを有効にします(プロファイルを有効にするを参照)。アプリケーションの start-script に環境変数を設定を含めます。

例えば、Linux の CQ 起動スクリプトでは、次のようにします。

#--------------------------------------------------------------------- # enables the YourKit Java Profiler #--------------------------------------------------------------------- YJP_HOME="/home/honwai/yjp-6.0.16/bin/linux-x86-32" export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$YJP_HOME

この設定により、エージェントライブラリが JVM で使用できるようになります。これより、使用される JVM のバージョン次第でことなる、実際にこのライブラリを統合する JVM の話に移ります。

Java バージョン JVM オプション
1.3/1.4 java - Xrunyjpagent
5以降 java -agentlib:yjpagent

これで、アプリケーションと実際のプロファイリングを開始できます。エージェントライブラリは、一部の情報を標準出力(CQ の場合は、(logs/startup.log)サーバー)に印刷します。

[YourKit Java Profiler 6.0.16] Using JVMPI (Linux; 32 bit JVM)

[YourKit Java Profiler 6.0.16] *** HINT ***: Use Java 5 (or newer) when possible!

[YourKit Java Profiler 6.0.16] Profiler agent is listening on port 10001...

ヒント:CQ4.2で、serverctl のスクリプトは、高機能化して、起動の各種オプションを指定できるようになります。YourKit エージェントライブラリを使用して、JVM を起動するオプションを含みます。上述の環境変数の設定は必須ですが、追加の JVM オプションを設定する必要はありません。

linuxbox:/opt/day/cq-4.2/server# ./start --profile

使用なオプションの完全なリストを取得するには、次をタイプします。/serverctl そうすれば、すべての利用可能なオプションのリストを取得できます。

アプリケーションへの YourKit プロファイラーの接続

プロファイリングを有効にしてアプリケーションを起動すると、エージェントライブラリは、システムで使用可能な空きポートを選択します。ポートを知っている必要はありません。YourKit ツールは、ローカル、或いはリモートでの実行中のプロファイルされたアプリケーションへ自動的に接続できます。複数のアプリケーションが見つかった場合は、特定のアプリケーションを選択するように求められます。

また、ローカルセキュリティ設定(例、ファイアウォール)が任意のポートを選択できない場合、専用のポートを指定できます。エージェントライブラリに渡すことができるオプションの完全なリストについては、次の表を参照してください。

エージェントライブラリオプション

オプション 説明
無効な alloc (Java 5以降/JVMTI のみ)オブジェクト割り当ての記録に必要な手順含むバイトコードを取り付けないでください。
disablecounts (Java 5以降/JVMTI のみ)CPU トレーシングに必要な手順を含むバイトコードをインストールしないでください。CPU サンプリングのみ使用できます。
disablej2ee (Java 5以降/JVMTI のみ)J2EE プロファイリングに必要な手順を含むバイトコードをインストールしないでください。
サンプリング CPU サンプリングをオンにして Java アプリケーションをローンチします。開始直後から CPU をプロファイルする必要はありません。代わりに、多くの場合、ユーザーインターフェースから後で測定、或いはプロファイラー API を使用した測定を開始、または停止することを推奨します。
トレーシング CPU トレーシングを使用して Java アプリケーションをローンチします。開始直後から CPU をプロファイルする必要はありません。代わりに、多くの場合、ユーザーインターフェイスから、またはプロファイラー API を使用して後で測定することを開始、或いは停止することを推奨します。このオプションは、「disablecounts」と組み合わせて使用することはできません。
noj2ee 高度なプロファイリング J2EE を実行しないでください。このオプションは「サンプリング」または「トレーシング」で始まる CPU のプロファイリングにのみ影響します。
alloc 開始オブジェクトの割り当て記録を使用して、Java アプリケーションをローンチします。すべてのオブジェクトが記録されます。最初から割り当てを記録する必要はありません。代わりに、プロファイラーから、またはプロファイラー API を使用してあとで記録を開始、または停止することができます。このオプションは、「disablealloc」と組み合わせて使用することはできません。
allocadaptive 開始オブジェクトの割り当て記録を使用して、Java アプリケーションをローンチします。可能な限り多くのオブジェクトが記録されるので、適切なレベルを確保してください。最初から割り当てを記録する必要はありません。代わりに、プロファイラーから、またはプロファイラー API を使用してあとで記録を開始、または停止することができます。このオプションは、「disablealloc」と組み合わせて使用することはできません。
usedmem=<percent> 使用されたヒープメモリがしきい値に達したときに、メモリのスナップショットを自動的にキャプチャします。
onexit=memory 終了時は常に、メモリのスナップショットをキャプチャします。CPU のスナップショットは、CPU のプロファイリングがプロファイリングされるアプリケーションの終了時に使用されている場合、自動的にキャプチャされます。
onexit=telemetry 終了時にテレメトリスナップショットをキャプチャします。このオプションは、プロファイリングされたアプリケーションが IDE から開始されるときに、自動的に使用されます。
port=<value> プロファイラーエージェントがプロファイラーと通信用に聞くポートを指定します。デフォルトでは、無料ポートは選択されています。
onlylocal プロファイリングされたアプリケーションへのローカル接続のみ許可
dir=<directory for="for" snapshots="snapshots"> スナップショットを作成するディレクトリを指定します。デフォルトでは、<user home="home">/Snapshots ディレクトリが使用されます。
quiet プロファイラーエージェントがコンソールに出力する診断メッセージを無効にします。
help エージェントパラメーターの短い説明を印刷します。

複数の値はコンマで区切ります。Java のリクエストに注意してください after -Xrunyjpagent but = after -agentlib:yjpagent.

例(Java 5以降):

java -agentlib:yjpagent FooClass java -agentlib:yjpagent=onexit=memory,dir=c:\MySnapshots FooClass java -agentlib:yjpagent=usedmem=70 FooClass

例(Java 1.3/1.4):

java -Xrunyjpagent FooClass java -Xrunyjpagent:onexit=memory,dir=c:\MySnapshots FooClass java -Xrunyjpagent:usedmem=70 FooClass

ドキュメント

YourKit プロファイラーがインストールされると、<!YourKit Java Profiler Home>/docs/help/index.html のインストールディレクトリ広範な HTML ドキュメントがあります。プロファイリングの対象となるターゲットアプリケーションについてのエージェントライブラリを統合する方法について、詳しく説明します。また、エージェントに渡すことができる便利なオプションも多数提供されます。例:

  • アプリケーションが終了すると、heap-dump を生成します
  • 確かなしきい値に達すると、heap-dump を生成します

これらのオプションは、<!YourKit Java Profiler Home>/docs/help/agent.html で見つけることができます。

現在の7.0 リリースは、ドキュメントが付属されていないので、サーバーの設定を参照してください。

  • \\setup\install\profiling\yjp-6.0\docs\help\index.html

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

法律上の注意   |   プライバシーポリシー