JProfiler ヘルプDownload

スクリプトプローブ


IDEでカスタムプローブを開発するには、インターセプションポイントとプローブが提供する利点を明確に理解する必要があります。一方、スクリプトプローブを使用すると、JProfiler GUIで直接簡単なプローブを迅速に定義し、APIを学ぶことなく実験できます。埋め込みまたは注入されたカスタムプローブとは異なり、スクリプトプローブは実行中のプロファイリングセッション中に再定義でき、迅速な編集-コンパイル-テストループを実現します。

スクリプトプローブの定義

スクリプトプローブは、インターセプトされたメソッドを選択し、プローブのペイロード文字列を返すスクリプトを入力することで定義されます。このようなメソッドとスクリプトのペアを複数まとめて1つのプローブにすることができます。

スクリプトプローブの設定はセッション設定でアクセスできます。ここでスクリプトプローブを作成および削除し、他のプロファイリングセッションでインポートできるセットにスクリプトプローブを保存します。

各スクリプトプローブには名前とオプションで説明が必要です。名前はJProfilerのビューセレクタの「JEE & Probes」セクションにプローブビューを追加するために使用されます。説明はプローブビューのヘッダーに表示され、その目的を簡潔に説明する必要があります。

メソッドを選択するには、設定されたクラスパスからクラスを選択するか、プロファイルされたクラスから選択するなど、複数のオプションがあります。プロファイリングセッションがすでに実行中の場合は、選択したクラスからメソッドを選択できます。

インターセプトされたメソッドを選択するはるかに簡単な方法は、呼び出しツリービューからです。コンテキストメニューで、スクリプトプローブでメソッドをインターセプトアクションを選択すると、新しいプローブを作成するか、既存のプローブにインターセプションを追加するかを尋ねられます。

プローブスクリプト

スクリプトエディタでは、インターセプトされたメソッドのすべてのパラメータと、メソッドが呼び出されたオブジェクトにアクセスできます。インターセプトされたメソッドの戻り値やスローされた例外にアクセスする必要がある場合は、埋め込みまたは注入されたプローブを書く必要があります。

この環境では、スクリプトはペイロード文字列を構築できます。これは、式として、またはreturn文を含むステートメントのシーケンスとして構築できます。このようなスクリプトの最も単純なバージョンは、1つのパラメータに対してparameter.toString()を返すか、プリミティブ型のパラメータに対してString.valueOf(parameter)を返します。nullを返すと、ペイロードは作成されません。

CPUとプローブデータを同時に記録する場合、CPUセクションの呼び出しツリービューは、適切な呼び出しスタックでプローブビューへのリンクを表示します。あるいは、CPU呼び出しツリービューでペイロード文字列をインラインで表示することを選択できます。プローブウィザードの「ペイロードインターセプション->呼び出しツリー注釈」ステップにはこのオプションが含まれています。

スクリプトに利用可能なもう1つのパラメータはスクリプトコンテキストです。これは、現在のプローブに定義された任意のスクリプトの呼び出し間でデータを保存できるcom.jprofiler.api.agent.ScriptContext型のオブジェクトです。たとえば、インターセプトされたメソッドAが良いテキスト表現を持たないオブジェクトのみを参照する場合、オブジェクトと表示名の関連付けはメソッドBをインターセプトすることで取得できます。その場合、同じプローブでメソッドBをインターセプトし、オブジェクトとテキストの関連付けをスクリプトコンテキストに直接保存できます。メソッドAでは、その表示テキストをスクリプトコンテキストから取得し、ペイロード文字列を構築するために使用します。

インターセプトメソッド A:· object c· name nscriptContext.putObject(c,n);return null;タイム測定インターセプトメソッド B:· object creturn scriptContext.getObject(c);12

これらの種類の懸念があまりにも複雑になる場合は、埋め込みまたは注入されたプローブAPIに切り替えることを検討してください。

欠けている機能

スクリプトプローブはカスタムプローブ開発への簡単なエントリを促進するように設計されていますが、完全なプローブシステムからいくつかの機能が欠けていることに注意する必要があります:

  • スクリプトプローブは呼び出しツリーの分割を行うことができません。JProfiler UIでは、これはカスタムプローブの概念で説明されているように別の機能です。埋め込みおよび注入されたプローブは、呼び出しツリー分割機能を直接提供します。
  • スクリプトプローブは制御オブジェクトを作成したり、カスタムプローブイベントタイプを作成したりすることができません。これは埋め込みまたは注入されたプローブでのみ可能です。
  • スクリプトプローブは戻り値やスローされた例外にアクセスすることができません。埋め込みおよび注入されたプローブとは異なります。
  • スクリプトプローブは再入可能なインターセプションを処理できません。メソッドが再帰的に呼び出される場合、最初の呼び出しのみがインターセプトされます。埋め込みおよび注入されたプローブは、再入可能な動作に対する詳細な制御を提供します。
  • デフォルトのテレメトリー以外のテレメトリーをプローブビューにバンドルすることはできません。代わりに、スクリプトテレメトリ機能を使用することができます。これはカスタムプローブの概念で示されています。