JProfilerには、プロファイリングエージェントを設定し、コマンドラインからプロファイリングアクションを制御するためのいくつかのコマンドラインツールが含まれています。
実行中のJVMへのプロファイリングエージェントのロード
コマンドラインユーティリティ bin/jpenableを使用すると、バージョン6以上の任意の実行中のJVMにプロファイリングエージェントをロードできます。コマンドライン引数を使用して、ユーザー入力を必要としないようにプロセスを自動化できます。サポートされている引数は次のとおりです。
使用法: jpenable [オプション]
jpenableは選択されたローカルJVMでプロファイリングエージェントを開始し、
別のコンピュータから接続できるようにします。JProfiler GUIがローカルで実行されている場合、
この実行可能ファイルを実行する代わりにJProfiler GUIから直接アタッチできます。
* 引数が指定されていない場合、jpenableはまだプロファイルされていないローカルJVMを
検出し、コマンドラインで必要なすべての入力を求めます。
* 以下の引数を使用することで、コマンドラインでユーザー入力を部分的または完全に提供できます:
-d --pid=<PID> プロファイルされるべきJVMのPID
-n --noinput いかなる状況でもユーザー入力を求めない
-h --help このヘルプを表示
--options=<OPT> エージェントに渡されるデバッグオプション
GUIモード: (デフォルト)
-g --gui JProfiler GUIを使用してJVMにアタッチします
-p --port=<nnnnn> プロファイリングエージェントがJProfiler GUIからの
接続を待ち受けるポート
-a --address=<IP> プロファイリングエージェントが待ち受けるアドレス。このパラメータが
なければ、localhostからのみアタッチが可能です。すべてのアドレスで
待ち受けるには0.0.0.0を使用します。
オフラインモード:
-o --offline JVMはオフラインモードでプロファイルされます
-c --config=<PATH> プロファイリング設定を含む設定ファイルへのパス
-i --id=<ID> 設定ファイル内のセッションID。設定ファイルに単一のセッションしか
含まれていない場合は不要です。
JVMはjpenableと同じユーザーとして実行されている必要があることに注意してください。
そうでないとJProfilerは接続できません。
例外は、ローカルシステムアカウントで実行されているWindowsサービスです。
jpenableを使用して対話的にリストする場合です。
HPROFスナップショットの保存
ヒープスナップショットが必要な場合は、プロファイリングエージェントをVMにロードせずに
HPROFスナップショットを保存する
bin/jpdumpコマンドラインツールを使用することを検討してください。
使用法: jpdump [オプション]
jpdumpは、ローカルで実行中のJVMからヒープをファイルにダンプします。
Hotspot VMはHPROFファイルを生成し、OpenJ9 VMはPHDファイルを生成します。
HPROFおよびPHDファイルは、その後JProfiler GUIで開くことができます。
* 引数が指定されていない場合、jpdumpはローカルで実行中のすべてのJVMを一覧表示します。
* 次の引数を使用して、コマンドラインでユーザー入力を部分的または完全に指定できます:
-p --pid=<PID> ヒープをダンプするJVMのPID
PIDが指定されている場合、追加の質問はされません。
-a --all すべてのオブジェクトを保存します。指定されていない場合は、
生存オブジェクトのみがダンプされます。
-f --file=<PATH> ダンプファイルのパス。指定されていない場合、
ダンプファイルは現在のディレクトリに<VM名>.hprofとして書き込まれます。
ファイルが既に存在する場合、番号が追加されます。
-h --help このヘルプを表示
JVMはjpdumpと同じユーザーとして実行されている必要があることに注意してください。
そうでない場合、JProfilerは接続できません。
例外は、ローカルシステムアカウントで実行されているWindowsサービスです。
これらをjpdumpで対話的にリストする場合です。
これは、プロファイリングエージェントをロードしてJProfilerヒープスナップショットを保存するよりもオーバーヘッドが低くなります。また、プロファイリングエージェントは決してアンロードされないため、この方法は本番環境で実行されているJVMに適しています。
プロファイリングエージェントの制御
引数なしで bin/jpcontroller実行ファイルを起動すると、ローカルマシン上のプロファイルされたJVMへの接続を試みます。複数のプロファイルされたJVMが検出された場合、リストから選択できます。
jpcontrollerは、プロファイリング設定が設定されているJVMにのみ接続できるため、-agentpath
VMパラメータの"nowait"オプションでJVMが起動された場合には機能しません。このオプションは、統合ウィザードの"Startup mode"画面でStartup immediately, connect later with the JProfiler GUIラジオボタンを選択したときに設定され、まだJProfiler
GUIがエージェントに接続していない場合に設定されます。 jpenableを--offline引数なしで使用する場合も、 jpcontrollerがプロファイルされたプロセスに接続する前にJProfiler
GUIからの接続が必要です。
リモートコンピュータ上のプロセスに接続したい場合、またはJVMがバージョン6以上のHotSpot
JVMでない場合、VMパラメータ-Djprofiler.jmxServerPort=[port]をプロファイルされたJVMに渡す必要があります。そのポートでMBeanサーバーが公開され、選択したポートを jpcontrollerへの引数として指定できます。追加のVMパラメータ-Djprofiler.jmxPasswordFile=[file]を使用して、user
password形式のキーと値のペアを持つプロパティファイルを指定して認証を設定できます(スペースまたはタブで区切られています)。これらのVMパラメータはcom.sun.management.jmxremote.port
VMパラメータによって上書きされることに注意してください。
JMXサーバーの明示的なセットアップにより、コマンドラインコントローラーを使用して jpcontroller host:portを呼び出すことでリモートサーバーに接続できます。リモートコンピュータがIPアドレスでのみ到達可能な場合、-Djava.rmi.server.hostname=[IP
address]をリモートVMへのVMパラメータとして追加する必要があります。
デフォルトでは、 jpcontrollerはインタラクティブなコマンドラインユーティリティですが、手動入力を必要とせずにプロファイリングセッションを自動化することもできます。自動化された呼び出しでは、[pid
|
host:port]を渡してプロファイルされたJVMを選択し、--non-interactive引数を渡します。さらに、コマンドのリストが読み取られ、stdinからまたは--command-file引数で指定されたコマンドファイルから読み取られます。各コマンドは新しい行で開始され、空白行または"#"コメント文字で始まる行は無視されます。
この非インタラクティブモードのコマンドは、JProfiler MBeanのメソッド名と同じです。それらは同じ数のパラメータを必要とし、スペースで区切られます。文字列にスペースが含まれている場合は、ダブルクォートで囲む必要があります。さらに、sleep
<seconds>コマンドが提供されており、指定した秒数だけ一時停止します。これにより、記録を開始し、しばらく待ってからスナップショットをディスクに保存することができます。
プロファイリング設定はプロファイリングエージェントに設定されている必要があります。これはJProfiler UIに接続するときに行われます。JProfiler UIに接続しない場合、起動コマンドで手動で設定するか、jpenableを使用して設定する必要があります。詳細については、起動時のプロファイリング設定の設定に関するヘルプトピックを参照してください。
jpcontrollerのサポートされている引数は以下に示されています:
使用法: jpcontroller [オプション] [ホスト:ポート | pid]
* 引数が指定されていない場合、jpcontrollerはプロファイルされた
ローカルJVMを検出しようとします
* 単一の数字が指定された場合、jpcontrollerはプロセスID [pid] のJVMに接続を試みます。
そのJVMがプロファイルされていない場合、jpcontrollerは接続できません。
その場合は、まずjpenableユーティリティを使用してください。
* それ以外の場合、jpcontrollerは "ホスト:ポート" に接続します。ここでポートは、
プロファイルされたJVMのVMパラメータ -Djprofiler.jmxServerPort=[port] で
指定された値です。
使用可能なオプション:
-n --non-interactive コマンドのリストがstdinから読み込まれる
自動セッションを実行します。
-f --command-file=<PATH> stdinの代わりにファイルからコマンドを読み込みます。
--non-interactiveと一緒に使用する場合のみ適用されます。
非対話型コマンドの構文:
RemoteControllerMBeanのjavadoc (https://bit.ly/2DimDN5) を参照して、
操作のリストを確認してください。パラメータはスペースで区切られ、
スペースを含む場合は引用符で囲む必要があります。例えば:
addBookmark "Hello world"
startCPURecording true
startProbeRecording builtin.JdbcProbe true true
sleep 10
stopCPURecording
stopProbeRecording builtin.JdbcProbe
saveSnapshot /path/to/snapshot.jps
sleep <秒数> コマンドは指定された秒数だけ一時停止します。
空行と # で始まる行は無視されます。