プロファイリングエージェントが記録を開始する前に、プロファイリング設定を行う必要があります。これはJProfiler UIで接続したときに行われます。状況によっては、プロファイリングエージェントが起動時にプロファイリング設定を知っている必要があります。主なユースケースは次のとおりです:
-
オフラインプロファイリング
トリガーまたはAPIを使用してデータを記録し、スナップショットを保存します。このモードではJProfiler GUIは接続できません。 詳細については、オフラインプロファイリングのヘルプトピックを参照してください。 -
ヘッドレスマシンでのjpcontrollerを使用したプロファイリング
コマンドラインユーティリティjpcontroller は、JProfiler GUIの代わりに使用して、データを記録し、インタラクティブまたは非インタラクティブなコマンドファイルでスナップショットを保存できます。ただし、jpcontrollerにはプロファイリング設定を構成する機能がないため、事前に設定しておく必要があります。 -
古いOpenJ9およびIBM JVMへのremote attach
8u281、11.0.11、およびJava 17より前の古いOpenJ9およびIBM JVMは、プロファイルされたプロセスの安定性を損なうことなくクラスを再定義する機能を持っていないため、プロファイリング設定は起動時に行う必要があります。 JProfilerのremoteインテグレーションウィザードの「Profiled JVM」ステップでJVMの種類を尋ねられ、Older OpenJ9 and IBM JVMsを選択すると、ウィザードは以下で説明するオプションを追加します。
一般的に、起動時にプロファイリング設定を行うことは最も効率的な操作モードです。なぜなら、クラスの再定義を最小限に抑えられるからです。利便性の低下が問題でなければ、あらゆる種類のプロファイリングsessionに使用できます。
起動時のプロファイリング設定の指定
インテグレーションウィザードを使用する場合は、「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引数を渡してください。
configファイルを使用しないインライン設定
オフラインプロファイリングでは、最も一般的なsession設定のみが必要な場合、configファイルは不要です。代わりに、-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.
以下のインラインsession設定が利用可能です:
-
呼び出しツリーの収集
callTreeMode=sampling|instrumentation|asyncは呼び出しツリーの収集モードを選択します。instrはinstrumentationのショートカットとして使用できます。 -
フィルター
profile、compact、ignoreはコロン区切りのパッケージ名またはクラス名のリストを受け付けます。パッケージ名はドットで終わる必要があります。フィルターオプションが指定されない場合、デフォルトのフィルターが使用されます。 -
行番号
lineNumbers=true|falseは呼び出しツリーへの行番号の記録を有効にします。
jpenableでは、オプション名にダッシュを使用します。例えば--line-numbers、
--call-tree-mode、--profileなどです。トリガー、プローブ固有の設定、その他のあまり使用されないオプションなどの高度なsession設定には、configファイルが引き続き利用可能です。
インライン設定では、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データも記録されます。
configファイルの準備
参照されるconfigファイルは、現在のマシンのJProfilerインストールのconfigファイルにすることができます。その場合、configパラメータをまったく指定する必要はありません。JProfilerのconfigファイルは
$HOME/.jprofiler16/jprofiler_config.xmlまたは%USERPROFILE%\.jprofiler16\jprofiler_config.xml
にあり、-agentlib VMパラメータのconfigオプションのデフォルトです。
多くの場合、自動プロファイリングは別のマシンで実行する必要があり、ローカルのJProfiler configファイルを参照することはできません。その場合は、ローカルマシンのJProfiler UIでプロファイリング設定を含むsessionを準備し、Session→Export Session Settingsでエクスポートして、JProfilerが実行されているマシンに転送できます。
session IDは、session設定ダイアログの「Application
settings」タブの右上隅に表示されます(以下のスクリーンショットを参照)。エクスポートされたファイルにsessionが1つしか含まれていない場合、idパラメータを指定する必要はありません。
configファイルの同期
初期設定が完了した後、将来のプロファイリング実行のためにプロファイリング設定を調整したい場合があります。これには、変更を加えるたびにconfigファイルをremoteマシンにコピーする必要があります。
JProfilerのremote sessionには、このプロセスを自動化できる「Config synchronization」機能があります。
sessionがSSH経由で起動される場合、SSH経由でconfigファイルをremoteマシンに直接コピーできます。それ以外の場合でも、remoteマシンにマウントされているローカルディレクトリにconfigファイルをコピーできます。また、任意のコマンドを実行して他の方法でconfigファイルをコピーすることもできます。



