JProfiler ヘルプ

自動チューニングと無視されたメソッド

呼び出しツリー機能の詳細

メソッドコールの記録タイプがインストゥルメンテーションに設定されている場合、プロファイルされたクラスのすべてのメソッドがインストゥルメントされます。 これは、実行時間が非常に短いメソッドに対して大きなオーバーヘッドを生み出します。このようなメソッドが非常に頻繁に呼び出されると、それらのメソッドの測定時間が極端に長くなります。 また、インストゥルメンテーションによって、ホットスポットコンパイラによる最適化が妨げられる可能性もあります。 極端なケースでは、インストゥルメントされていない実行ではそうではないにもかかわらず、このようなメソッドが支配的なホットスポットになってしまいます。 一例としては、次の文字を読み取るXMLパーサーのメソッドがあります。このようなメソッドは極めて短時間でリターンしますが、短期間に何百万回も呼び出されることがあります。

この問題は、メソッドコールの記録タイプがサンプリングに設定されている場合には発生しません。ただし、サンプリングでは呼び出し回数が提供されず、比較的長いメソッドコールのみが表示されるほか、サンプリング使用時にはいくつかのビューで全機能を利用できなくなります。

インストゥルメンテーションに関する問題を軽減するため、JProfilerには自動チューニングと呼ばれるメカニズムがあります。プロファイリングエージェントは、インストゥルメンテーションのオーバーヘッドが高いメソッドを定期的にチェックし、JProfiler GUIに送信します。ステータスバーには、オーバーヘッドホットスポットの存在を警告するエントリが表示されます。

そのステータスバーのエントリをクリックすると、検出されたオーバーヘッドホットスポットを確認し、それらを無視されたメソッドのリストに追加することを選択できます。これにより、これらの無視されたメソッドはインストゥルメントされなくなります。セッションの終了時にも、同じダイアログが表示されます。

新しいプロファイリング設定を適用すると、すべての無視されたメソッドが呼び出しツリーに表示されなくなります。それらの実行時間は、呼び出し元メソッドの自己時間に加算されます。後でプロファイリングビューで特定の無視されたメソッドが必要であることが判明した場合は、セッション設定のIgnored methodsタブで削除できます。

無視されたメソッドのデフォルト設定には、動的メソッドディスパッチに使用されるものの、実際の呼び出しチェーンの追跡を困難にするGroovyの呼び出し元サイトクラスが含まれています。

無視されたメソッドを手動で追加したい場合は、セッション設定で行うこともできますが、はるかに簡単な方法は、呼び出しツリーでメソッドを選択し、コンテキストメニューからメソッドを無視アクションを呼び出すことです。

フィルター設定では、フィルターエントリのタイプを「Ignored」に設定することで、クラスまたはパッケージ全体を無視することもできます。選択からフィルターを追加メニューには、選択したノードに応じたアクションが含まれており、クラスまたは最上位パッケージまでのパッケージを無視することを提案します。選択したノードがコンパクトプロファイルされているかプロファイルされているかに応じて、フィルターを逆のタイプに変更するアクションも表示されます。

自動チューニングに関するメッセージを表示したくない場合は、プロファイリング設定で無効にすることができます。また、オーバーヘッドホットスポットを判定するための基準を設定することもできます。次の両方の条件を満たす場合、メソッドはオーバーヘッドホットスポットと見なされます。

  • そのすべての呼び出しの合計時間が、スレッド内の全合計時間の千分率(パーミル)でのしきい値を超えている
  • その平均時間がマイクロ秒単位の絶対しきい値よりも短い