JProfiler 16.2: コマンドラインからのプロファイリング
JProfiler 16.2では、オフラインプロファイリングがはるかに便利になりました。「オフラインプロファイリング」とは、JProfilerのGUIを使わずにプロファイリングを行うモードです。CIサーバー、コンテナ、本番システムで役立ちます。以前のJProfilerのバージョンでは、プロファイリング設定は、JProfilerのGUIからエクスポートした設定ファイルを使って、コマンドライン経由でエージェントに伝える必要がありました。その後、記録コマンドはController API、JProfiler MBean、または「jpcontroller」コマンドラインユーティリティを経由して実行する必要がありました。
多くの場合、このワークフローは不必要に複雑です。そこで今回、最も一般的なプロファイリング設定と単純な自動記録シーケンスをコマンドラインで直接設定できる実用的なアプローチを導入しました。-agentpath VMパラメータ、jpenableアタッチツール、およびGradleとAntのプロファイリングタスクで利用できます。これは自動化タスクにとって大きな簡素化であるだけでなく、コマンドラインに新たに加わった住人であるAIエージェントにも大きなメリットをもたらします。
たった1つのVMパラメータ
これまで、オフラインプロファイリングを開始するには次のようにしていました:
-agentpath:...=offline,id=<ID>,config=/path/to/jprofiler_config.xml
設定ファイルは、JProfilerのGUIが生成するXMLドキュメントです。自分のマシンでエクスポートし、対象マシンにコピーして、設定を変更したときには同期を取り続ける必要があります。コンテナイメージでは、そのファイルをマウントする必要もあります。
「10分間CPUを記録してからスナップショットを保存する」のような計画の場合、GUIでトリガーを設定するか、プログラムからcontroller APIを利用するか、jpcontrollerコマンドラインユーティリティで手動で記録を実行する必要がありました。この方式のオフラインプロファイリングも引き続きサポートされますが、必要になるのは高度なプロファイリング設定やトリガーを使う場合だけです。
16.2では、上記のプロファイリング計画をVMパラメータの中で直接設定できます:
-agentpath:...=offline,callTreeMode=sampling,profile=com.mycorp.,\ snapshot=/tmp/snapshot.jps,recording=cpu,duration=10m
これにより、JVMはサンプリングで起動し、プロファイリングは自分のパッケージに限定され、CPUデータが10分間記録された後にスナップショットが保存されます。
利用可能なプロファイリング設定パラメータは次のとおりです
- コールツリーモード(
sampling、instrumentationまたはasync) profile、compact、ignoreの各パッケージフィルタlineNumbersオプション
自動記録のオプションは次のとおりです
recordingはcpu、allocation、およびjdbcやhttp_serverなどのプローブ名を受け付けますdurationは30s、10m、1hのような値を取ります。このパラメータを省略すると、記録はJVMが終了するまで実行され、シャットダウン時にスナップショットが保存されます。delayは同じ時間値の形式を取り、アプリケーションを先にウォームアップさせることができます
これにより、デプロイメントでのプロファイリングの実行方法が大きく改善されます。コンテナイメージに追加の設定ファイルはもう不要になり、プロファイリング設定は単に起動コマンドの一部になるか、JAVA_OPTSなどの類似の環境変数に含まれます。記録内容を変更するには、設定ファイルを同期する代わりに、デプロイメント記述子を編集するだけで済みます。
実行中のJVMへのアタッチ
この新しい簡素化されたオフラインプロファイリングのフローは、起動時のVMパラメータだけに限定されません。jpenableコマンドラインユーティリティを使って既に実行中のJVMをプロファイリングする場合にも機能します。
対話的に起動すると、充実したコンソールがオフラインプロファイリングの設定と自動記録シーケンスを順を追って案内します:


非対話的な使用では、すべての設定をコマンドラインオプションとして指定できます。例:
jpenable --offline --call-tree-mode=sampling --profile=com.mycorp. \ --snapshot=/tmp/snapshot.jps --recording=cpu:jdbc --duration=5m
ビルドシステムでのプロファイリング
GradleとAntのプロファイリングタスクは、同じ機能をタスク属性として公開しています:
task run(type: com.jprofiler.gradle.JavaProfile) {
mainClass = 'com.mycorp.MyMainClass'
classpath sourceSets.main.runtimeClasspath
offline = true
callTreeMode = 'sampling'
profile = ['com.mycorp.']
snapshotFile = file('build/snapshots/run.jps')
recording = ['cpu', 'allocation']
duration = '10m'
}
これにより、CIジョブは、ビルドスクリプトに直接記述した設定を使って、プロファイリングスナップショットをビルドアーティファクトとして簡単に作成できるようになります。
AIエージェント
AIコーディングエージェントはコマンドライン上で動作します。ビルドの実行、テストの実行、ログ出力の読み取りはできますが、ウィザードをクリックして進んだり、GUIから設定ファイルをエクスポートしたりすることはできません。16.2以降、エージェントは1つのコマンドでプロファイリングセッション全体をコマンドラインで実行できます。テストの呼び出しにVMパラメータを追加すれば、JVMが終了時にスナップショットを保存し、その後エージェントが結果を分析します。
スナップショットを読み込み、ホットスポットから根本原因へとエージェントを導く16.1のJProfiler MCPサーバーと組み合わせれば、測定、修正、検証という一連のループを、誰もJProfilerのUIを開くことなく実行できます。人が同じスナップショットをGUIで見たい場合は、.jpsスナップショットファイルを開くだけです。
はじめに
JProfiler 16.2はダウンロードページから入手できます。インライン設定の完全なリファレンスは、オフラインプロファイリングのドキュメントに記載されています。