JProfiler ヘルプ

起動時におけるプロファイリング設定の指定

設定の詳細

プロファイリングエージェントが記録を開始できるようにするには、事前にプロファイリング設定を指定しておく必要があります。通常はJProfiler UIと接続した際に行われます。特定の状況下では、エージェントが起動時にプロファイリング設定を把握していることが求められます。主なユースケースは次のとおりです:

  • オフラインプロファイリング
    トリガーやAPIを使用してデータを記録し、スナップショットを保存します。このモードではJProfiler GUIを接続できません。詳細については、オフラインプロファイリングに関するヘルプトピックを参照してください。
  • ヘッドレスマシンでのjpcontrollerによるプロファイリング
    JProfiler GUIの代わりにコマンドラインユーティリティjpcontrollerを使用して、対話形式または非対話形式のコマンドファイルでデータを記録し、スナップショットを保存できます。ただし、jpcontrollerにはプロファイリング設定を構成する機能がないため、事前に行っておく必要があります。
  • 旧バージョンのOpenJ9およびIBM JVMへのリモートattach
    8u281、11.0.11、Java 17より前の旧バージョンのOpenJ9およびIBM JVMでは、プロファイルされたプロセスの安定性を損なうことなくクラスを再定義する機能がないため、起動時にプロファイリング設定を指定する必要があります。JProfilerのリモート統合ウィザードの「Profiled JVM」ステップでJVMのタイプを尋ねられた際に、Older OpenJ9 or IBM JVMを選択すると、ウィザードによって以下で説明するオプションが追加されます。

一般に、起動時にプロファイリング設定を指定することは、実行されるクラス再定義の回数が最小限で済むため、最も効率的な動作モードとなります。利便性の低下が問題にならない場合は、あらゆる種類のプロファイリングセッションで使用できます。

起動時におけるプロファイリング設定の指定

統合ウィザードを使用する場合は、「Local or Remote」ステップでOn a remote computerオプションを選択し、次に「Config synchronization」ステップでApply configuration at startupオプションを選択します。ウィザードによって、以降の段落で説明するのと同じオプションが追加されます。

プロファイリングエージェントをロードするために起動スクリプトへ-agentpath VMパラメーターを追加している場合、次の記述を追加することでプロファイリング設定を指定できます:

,config=<path to config file>,id=<session ID>

完全な-agentpathパラメーターは次のようになります:

-agentpath:/path/to/libjprofilerti.so=port=8849,nowait,config=/path/to/config,id=123

プロセス開始後に jpenableを使用してプロファイリングエージェントをロードする場合は、対話形式の実行でoffline modeを選択し、そこでconfigとIDを指定できます。あるいは、非対話形式の実行用に--offline、--config、および--id引数を渡します。

設定ファイルなしでのインライン設定

オフラインプロファイリングでは、最も一般的なセッション設定のみが必要な場合、設定ファイルは不要です。代わりに、-agentpathパラメーターに直接インラインオプションを追加できます。これは、コントローラーAPI、MBeanインターフェース、または jpcontrollerで記録を制御する場合に便利です。

-agentpath:/path/to/libjprofilerti.so=offline,callTreeMode=sampling,profile=com.mycorp.:org.example.

jpenableでattachする場合にも、同じオプションを指定できます:

jpenable --offline --call-tree-mode=sampling --profile=com.mycorp.:org.example.

次のインラインセッション設定を利用できます:

  • 呼び出しツリーの収集
    callTreeMode=sampling|instrumentation|asyncは呼び出しツリーの収集モードを選択します。インストゥルメンテーションにはショートカットinstrを使用できます。
  • フィルター
    profile、compact、およびignoreは、コロン区切りのパッケージ名またはクラス名のリストを受け入れます。パッケージ名はドットで終わる必要があります。フィルターオプションが指定されていない場合は、デフォルトのフィルターが使用されます。
  • 行番号
    lineNumbers=true|falseは、呼び出しツリー内での行番号の記録を有効にします。

jpenableの場合、オプション名にはダッシュを使用します(例: --line-numbers、--call-tree-mode、--profile)。トリガー、プローブ固有の構成、その他のあまり使用されないオプションなどの高度なセッション設定には、引き続き設定ファイルを使用できます。

インライン設定を使用すると、API呼び出しや jpcontrollerを使用せずに、自動記録を開始してスナップショットを保存することもできます。このモードではsnapshotオプションが必要です:

-agentpath:/path/to/libjprofilerti.so=offline,snapshot=/path/to/snapshot.jps,recording=cpu:allocation,duration=10m

jpenableを使用する場合、同じ記録を次のように構成できます:

jpenable --offline --snapshot=/path/to/snapshot.jps --recording=cpu:allocation --duration=10m

次の自動記録オプションを使用できます:

  • スナップショット
    snapshot=<path>は、保存されるスナップショットファイルを指定します。
  • 記録対象データ
    recording=<list>は、コロン区切りのデータタイプのリストを指定します。このオプションを省略した場合は、CPUデータが記録されます。スレッドとテレメトリーは常に記録されます。
  • 継続時間
    duration=<time>は、スナップショットが保存されるまでにデータを記録する継続時間を指定します。継続時間が指定されていない場合、記録はJVMが終了するまで継続し、その時点でスナップショットが保存されます。
  • 遅延
    delay=<time>は、エージェントが記録を開始するまでに待機する時間を指定します。

時間の値は負でない整数で、オプションでs、m、またはhを付加できます。サポートされている記録の値は、cpu、allocation、jdbc、jpa、mongo_db、cassandra、http_server、http_client、jndi、jms、kafka_producer、kafka_consumer、rmi、grpc、ai、ws、class_loader、exception、socket、file、process、およびgcです。プローブの記録を選択すると、CPUデータも記録されます。

設定ファイルの準備

参照する設定ファイルには、現在のマシン上のJProfilerインストールの設定ファイルを使用できます。この場合、configパラメーターを指定する必要はまったくありません。JProfilerの設定ファイルは$HOME/.jprofiler16/jprofiler_config.xmlまたは%USERPROFILE%\.jprofiler16\jprofiler_config.xmlにあり、-agentlib VMパラメーターのconfigオプションのデフォルト値となります。

自動プロファイリングを別のマシンで実行する必要があり、ローカルのJProfiler設定ファイルを参照できないことも少なくありません。その場合は、ローカルマシンのJProfiler UIでプロファイリング設定を含むセッションを準備し、Session→Export Session Settingsからエクスポートして、JProfilerが動作しているマシンへ転送できます。

セッションIDは、セッション設定ダイアログの「Application Settings」タブの右上隅で確認できます(以下のスクリーンショットを参照)。エクスポートしたファイルにセッションが1つしか含まれていない場合は、idパラメーターを指定する必要はありません。

設定ファイルの同期

初回セットアップの完了後、今後のプロファイリング実行のためにプロファイリング設定を調整したい場合があります。この場合、変更を行うたびに設定ファイルをリモートマシンにコピーする必要があります。

JProfilerのリモートセッションには、このプロセスを自動化できる「Config synchronization」機能が備わっています。

セッションがSSH経由で開始される場合は、SSH経由で設定ファイルをリモートマシンに直接コピーできます。そうでない場合でも、リモートマシンにマウントされているローカルディレクトリに設定ファイルをコピーできます。また、他の手段で設定ファイルをコピーするために任意のコマンドを実行することも可能です。