自動チューニングと無視されたメソッド
メソッドコール記録タイプがインストルメンテーションに設定されている場合、プロファイルされたクラスのすべてのメソッドがインストルメントされます。 これにより、非常に短い実行時間を持つメソッドに対して大きなオーバーヘッドが発生します。もしそのようなメソッドが非常に頻繁に呼び出されると、 測定されたそのメソッドの時間は非常に高くなりすぎます。また、インストルメンテーションのために、ホットスポットコンパイラがそれらを最適化するのを 妨げる可能性があります。極端な場合、これらのメソッドは支配的なホットスポットとなりますが、これはインストルメントされていない実行では当てはまりません。 例としては、次の文字を読み取るXMLパーサーのメソッドがあります。このようなメソッドは非常に迅速に戻りますが、短時間で何百万回も呼び出される可能性があります。
メソッドコール記録タイプがサンプリングに設定されている場合、この問題は発生しません。しかし、サンプリングは呼び出し回数を提供せず、 長いメソッドコールのみを表示し、サンプリングを使用するといくつかのビューは完全な機能を持ちません。
インストルメンテーションの問題を軽減するために、JProfilerには自動チューニングと呼ばれるメカニズムがあります。 プロファイリングエージェントは時折、高いインストルメンテーションオーバーヘッドを持つメソッドをチェックし、それらをJProfiler GUIに送信します。 ステータスバーには、オーバーヘッドホットスポットの存在を知らせるエントリが表示されます。
そのステータスバーエントリをクリックすると、検出されたオーバーヘッドホットスポットを確認し、無視されたメソッドのリストに受け入れることができます。 これらの無視されたメソッドはインストルメントされません。セッションが終了すると、同じダイアログが表示されます。
新しいプロファイリング設定を適用すると、すべての無視されたメソッドは呼び出しツリーから欠落します。 それらの実行時間は呼び出し元メソッドの自己時間に追加されます。後で無視されたメソッドがプロファイリングビューで不可欠であることが判明した場合は、 セッション設定の無視されたメソッドタブでそれらを削除できます。
無視されたメソッドのデフォルト設定には、動的メソッドディスパッチに使用されるGroovyの呼び出し元サイトクラスが含まれていますが、 実際の呼び出しチェーンを追跡するのが難しくなります。
手動で無視されたメソッドを追加したい場合は、セッション設定で行うことができますが、はるかに簡単な方法は、 呼び出しツリーでメソッドを選択し、コンテキストメニューからメソッドを無視アクションを呼び出すことです。
フィルター設定では、フィルターエントリのタイプを「無視」に設定することで、クラス全体やパッケージ全体を無視することもできます。 選択からフィルターを追加メニューには、選択されたノードに依存するアクションが含まれており、 クラスやトップレベルパッケージまでのパッケージを無視することを提案します。選択されたノードがコンパクトプロファイルされているか プロファイルされているかに応じて、フィルターを反対のタイプに変更するアクションも表示されます。
自動チューニングに関するメッセージを表示したくない場合は、プロファイリング設定で無効にすることができます。 また、オーバーヘッドホットスポットを決定するための基準を設定することもできます。メソッドがオーバーヘッドホットスポットと見なされるのは、 以下の条件の両方を満たす場合です:
- すべての呼び出しの合計時間がスレッド全体の合計時間のパーミルでしきい値を超える場合
- 平均時間がマイクロ秒単位の絶対しきい値より低い場合