理想的にはプログラムフローに沿って(通常のスレッド呼び出しスタックではなく)、要求ごとのプロファイリング統計をサポートするプロファイラーを探しています。つまり、基本的に、プロファイラーの呼び出しスタック+単一の要求ごとの順次呼び出しビューは、次のようになります。
doGet 100ms
+ doFilter 95ms
+ doFilter2 90ms
+ validateValues 20ms
+ calculateX 40ms
+ calc1 10ms
+ calc2 30ms
+ renderResponse 30ms
どのクラス/メソッドがプロファイリングされるかは、何らかの方法で構成されます。各メソッド呼び出しを処理するトレースプロファイラーの場合、これはもちろん使用できません。
私はdynaTraceを知っており、使用しています。その「PurePath」機能(http://www.dynatrace.com/en/architecture-tame-complexity-with-purepath.aspx)はこれをサポートしていますが、小規模なプロジェクトで使用でき、初期投資とセットアップが少なくて済みます。
「クラシック」プロファイラー(YourKitなど)はこれをサポートしていますか?私はこの機能を見落としていましたか?
補遺:背景を提供する:主な目標は、実稼働中のシステムの監視と分析のための統計を取得することです。何よりもまず、リクエストにかかる時間のライブ統計を取得し、応答時間が長くなった場合に特定の(タイプの)リクエストのデータを取得することです(JETM + xを考えてください)。
リクエストごとのプロファイリング統計により、一部のリクエストだけが遅い理由を詳細に分析できます。たとえば、リクエストの10%が平均の10倍の時間がかかる場合などです。集計された統計では、これを解決するのは非常に困難です。
プログラムフローに沿って呼び出しをレンダリングするプロファイリング統計についても同じことが言えます。これは、リクエストのどこに問題があるかを簡単に特定できるためです。たとえば、メソッドが10個のDBクエリを実行すると、各呼び出しは10個だけでなく単一の呼び出しとして表示されます。集約された呼び出し。
理想的には、測定ポイントは実行時に構成および有効化/無効化されます。