JProfiler アーキテクチャ
プロファイルされたアプリケーション、JProfiler UI、およびすべてのコマンドラインユーティリティに関与する重要な相互作用の全体像が以下に示されています。
プロファイリングエージェント
"JVM tool interface" (JVMTI) は、プロファイラが情報にアクセスし、自身の計測を挿入するためのフックを追加するために使用するネイティブインターフェースです。これは、プロファイリングエージェントの少なくとも一部がネイティブコードとして実装されなければならないことを意味し、したがって JVM プロファイラはプラットフォームに依存しません。JProfiler は、ここにリストされているさまざまなプラットフォームをサポートしています。
JVM プロファイラは、起動時または後のある時点でロードされるネイティブライブラリとして実装されます。起動時にロードするには、VM パラメータ
-agentpath:<ネイティブライブラリへのパス>
をコマンドラインに追加します。このパラメータを手動で追加する必要はほとんどありません。なぜなら、JProfiler が
IDE 統合、統合ウィザード、または JVM を直接起動する場合などに自動的に追加するからです。しかし、これがプロファイリングを可能にするものであることを知っておくことが重要です。
JVM がネイティブライブラリのロードに成功すると、プロファイリングエージェントが初期化する機会を与えるためにライブラリ内の特別な関数を呼び出します。その後、JProfiler は
JProfiler>
で始まるいくつかの診断メッセージを出力し、プロファイリングがアクティブであることを確認できます。結論として、-agentpath
VM パラメータを渡すと、プロファイリングエージェントは正常にロードされるか、JVM が起動しません。
一度ロードされると、プロファイリングエージェントはスレッドの作成やクラスのロードなど、さまざまなイベントの通知を JVMTI に要求します。これらのイベントの一部は直接プロファイリングデータを提供します。クラスロードイベントを使用して、プロファイリングエージェントはロードされたクラスを計測し、独自のバイトコードを挿入して測定を行います。
JProfiler は、JProfiler UI を使用するか、 コマンドラインツールを使用して、すでに実行中の JVM
にエージェントをロードできます。その場合、必要な計測を適用するために、多数のすでにロードされたクラスを再変換する必要があるかもしれません。
bin/jpenable
データの記録
JProfiler エージェントはプロファイリングデータのみを収集します。JProfiler UI は別途起動され、ソケットを介してプロファイリングエージェントに接続します。リモートサーバーへの安全な接続のために、JProfiler を設定して SSH トンネルを自動的に作成することができます。
JProfiler UI から、エージェントにデータを記録するよう指示し、UI にプロファイリングデータを表示し、スナップショットをディスクに保存することができます。UI の代替として、プロファイリングエージェントはその MBean
を通じて制御することができます。この MBean を使用するコマンドラインツールは です。
bin/jpcontroller
プロファイリングエージェントを制御するもう一つの方法は、事前定義されたトリガーとアクションのセットを使用することです。この方法では、プロファイリングエージェントは無人モードで動作することができます。これは JProfiler では "オフラインプロファイリング" と呼ばれ、プロファイリングセッションを自動化するのに役立ちます。
スナップショット
JProfiler UI はライブプロファイリングデータを表示できますが、記録されたすべてのプロファイリングデータのスナップショットを保存する必要があることがよくあります。スナップショットは JProfiler UI で手動で保存されるか、トリガーアクションによって自動的に保存されます。
スナップショットは JProfiler UI で開いて比較することができます。自動処理のために、コマンドラインツール および
bin/jpexport
を使用して、以前に保存されたスナップショットからデータを抽出し、HTML レポートを作成することができます。
bin/jpcompare
実行中の JVM からヒープスナップショットを取得する低オーバーヘッドの方法は、 コマンドラインツールを使用することです。これは、JVM
の組み込み機能を使用して HPROF スナップショットを保存し、JProfiler で開くことができ、プロファイリングエージェントをロードする必要はありません。
bin/jpdump