JProfiler ヘルプ

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

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

メソッドコール記録タイプがインストゥルメンテーションに設定されている場合、プロファイルされたクラスのすべてのメソッドがインストゥルメントされます。 これにより、実行時間が非常に短いメソッドに対して大きなオーバーヘッドが発生します。このようなメソッドが非常に頻繁に呼び出される場合、 そのメソッドで計測される時間は実際よりもはるかに高くなります。また、インストゥルメンテーションの影響で ホットスポットコンパイラが最適化できなくなる場合もあります。極端なケースでは、このようなメソッドが主要なホットスポットとなってしまいますが、 インストゥルメントされていない実行ではそうはなりません。例としては、XMLパーサーで次の文字を読み込むメソッドなどが挙げられます。 このようなメソッドは非常に短時間で戻りますが、短時間に何百万回も呼び出されることがあります。

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

インストゥルメンテーションによる問題を軽減するために、JProfiler には 自動チューニング(auto-tuning)という仕組みがあります。プロファイリングエージェントは定期的にインストゥルメンテーションの オーバーヘッドが高いメソッドをチェックし、それらを JProfiler の GUI に通知します。ステータスバーには、 オーバーヘッドのあるホットスポットが存在することを知らせるエントリが表示されます。

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

新しいプロファイリング設定を適用すると、すべての無視されたメソッドは呼び出しツリーから除外されます。 それらの実行時間は呼び出し元メソッドの自己時間に加算されます。後で、無視されたメソッドの一部がプロファイリングビューで 必須であることが分かった場合は、セッション設定のIgnored Methodsタブでそれらを削除できます。

無視されるメソッドのデフォルト構成には、Groovy の動的メソッドディスパッチで使用される call-site クラスが含まれていますが、 これらは実際の呼び出しチェーンを追跡しにくくします。

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

フィルター設定では、フィルターエントリのタイプを「Ignored」に設定することで、クラス全体やパッケージ全体を無視することもできます。 Add Filter From Selectionメニューには、選択したノードに応じてクラスやパッケージ(最上位パッケージまで)を 無視する提案アクションが表示されます。選択したノードが compact-profiled か profiled かによって、 フィルタータイプを逆に変更するアクションも表示されます。

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

  • そのメソッドの全呼び出しの合計時間が、スレッド全体の合計時間に対するパーミル(千分率)で閾値を超えている
  • そのメソッドの平均時間が、マイクロ秒単位の絶対的な閾値よりも小さい