スタック
ホーム画面 > プロジェクト選択 > 分析 > スタック
特定の時間帯の呼び出しスタックの頻度とメソッド、トランザクションに関する詳細情報を確認できます。トップスタック, ユニークスタック, アクティブスタックを照会することができます。トップスタックは、呼び出し頻度の高いメソッドの使用量を示し、ユニークスタックは、同じ呼び出しスタックの頻度を分析します。アクティブスタックは、実行中のトランザクションのスタック情報を定期的に収集し、リアル タイムのパフォーマンス分析を可能にします。
スタック分析機能はJava及びPython、.NET商品プラットフォームでサポートします。
主な機能の案内
次の主な機能を利用できます。スタックの照会により、アプリケーションのパフォーマンスの問題をすばやく識別し、解決できます。特定のメソッド呼び出しの頻度、呼び出し経路、応答時間などを確認し、性能向上のための方案を用意することができます。
-
スタックタイプの選択
トップスタック, ユニークスタック, アクティブスタック中から希望するスタックを選択して照会することができます。
-
時間選択 / 開始日: 照会する時間を設定してください。特定の時間帯のスタックを照会したり、目的の期間を設定したりすることができます。スタックの種類によっては、照会できる期間が制限される場合があります。
ノートトップスタック及びユニークスタックを照会できる最大期間は3日です。
-
アプリケーション: 照会しようとしているエージェントを選択できます。特定のエージェントを選択でき、何も選択しない場合は、プロジェクトに含まれるすべてのエージェントを対象に照会します。
-
カラム選択: 希望するカラム項目を表示または非表示にすることができます。
-
比較する: 同じフィルター条件で1日以内に照会する際、選択したスタックを時間対比で比較することができます。これにより、時間による呼び出しスタックの変化を把握し、性能のトレンドを確認できます。詳細については、次の文書を参照してください。
-
: 各スタック タイプのテーブル リストでスタックまたはトランザクション項目を拡張すると、一番右側にスナップショット アイコンが表示されます。このアイコンを選択すると、そのスタックまたはトランザクション情報を画像ファイルとして保存できます。
基本的な使い方
-
画面上で照会したいスタックタイプを選択してください。
-
時間選択または開始日で希望する照会時間を設定してください。
-
アプリケーションで、照会するエージェントを選択してください。何も選択しない場合は、エージェント全体を対象に照会することができます。
-
ボタンを選択してください。
照会結果をスタックテーブルの一覧で確認することができます。
トップスタック
トップスタックでは、呼び出し頻度が最も高いメソッドの情報を提供します。スタックの最上段に位置するメソッドの呼び出し頻度により、サービスに最も影響を与えるメソッドを迅速に確認できます。メソッドの呼び出し頻度を把握し、CPUまたはメモリ荷がかかる原因を分析できます。これにより、性能改善のための方策を導き出すことができます。
WhaTapは、10秒(既定値) 間隔で収集したThread Stackを使用して、メソッドレベルの性能遅延を分析します。
DynamicClass.lambda_method(System.Runtime.CompilerServices.Closure,System.Object,System.Object[])
demo450.Controllers.DelayTestController.Get(Int32)
System.Threading.Thread.Sleep(Int32)
System.Web.Http.ApiController.ExecuteAsync(System.Web.Http.Controllers.HttpControllerContext,System.Threading.CancellationToken)
System.Web.Http.Controllers.ActionFilterResult.ExecuteAsync(System.Threading.CancellationToken)
System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[[System.__Canon,mscorlib]].Start[[System.Web.Http.Controllers.ActionFilterResult+<ExecuteAsync>d__5,System.Web.Http]](<ExecuteAsync>d__5 ByRef)
System.Web.Http.Controllers.ActionFilterResult+<ExecuteAsync>d__5.MoveNext()
System.Web.Http.Controllers.ApiControllerActionInvoker.InvokeActionAsync(System.Web.Http.Controllers.HttpActionContext,System.Threading.CancellationToken)
System.Web.Http.Controllers.ApiControllerActionInvoker.InvokeActionAsyncCore(System.Web.Http.Controllers.HttpActionContext,System.Threading.CancellationToken)
...
例)スタックのトップラインはlambda_method
です。
DynamicClass.lambda_method(System.Runtime.CompilerServices.Closure,System.Object,System.Object[])
トップラインは、ダンプを実行するスレッドがメソッドを実行中であることを意味します。すぐにキャッチされる可能性もありますが、確率的にそのモジュールの処理時間のコンセンサスの比率をスタックに表示します。このトップラインメソッドを計算してメソッドレベルのパフォーマンスを判断することができます。WhaTapは、トップライン頻度統計をトップスタック(Top Stack)と呼びます。
トップスタック分析により、導出されたメソッドをどのメソッドが呼び出したかについての頻度を分析できます。Stack Trace上の各ステップ(ステップ)基準で、ステップとステップ間の呼び出し比率をパーセンテージで分析した情報を提供します。最上位ステップのバックログ頻度ををパーセンテージで算出し、降順に並べ替えた結果を提示します。
各ステップ項目の一番左に ボタンをタップすると、そのステップを呼び出す上位ステップの呼び出し頻度基準をパーセンテージで算出して提供します。
トップスタック統計は十分なデータで判断する必要があります。収集したスタックの数が10個未満の少数の場合、統計的な意味を持つには不十分です。
トップスタックはチューニング時に認知しづらい部分のチューニングポイントを見つけるのに役立ちます。呼び出し頻度が最も高いスタックは、現在のアプリケーションサーバーで最も多くの応答遅延が発生していると判断できます。左端の割合は、アプリケーションサーバーのパフォーマンスに影響を与える程度です。
安定したアプリケーションサーバーであっても、呼び出し頻度の高いスタックは性能の低下を引き起こす可能性があるため、そのクラスは注意深く見ることをお勧めします。
トップスタックをクリックすると、そのトップスタックを呼び出す頻度を確認できます。トップスタックの呼び出し関係は1対1の関係であるため、トップスタックのdepthの深さが下がるにつれて情報の精度が低下する可能性があります。下位depthに関する情報は参考として使用し、チューニングを進めてください。
アプリケーションのパフォーマンスを向上させるには、最上位ステップのバックログ比率が高いモジュールのボトルネックを調べる必要があります。バックログ比率が高いモジュールの場合、パフォーマンスが少し向上しただけでも、アプリケーション全体が大幅に改善される可能性があります。
ダイアグラムで表示
複雑なスタック呼び出しステップを簡単に理解できるように、ダイアグラムチャートを提供します。スタックテーブルの右上にダイアグラムで表示ボタンを選択してください。これにより、各ステップの呼び出し頻度と実行経路を一目で把握できます。
-
各ノードを選択すると、下位のdepthのスタックが表示されます。
-
マウススクロールで拡大/縮小したり、ドラッグしたりして動くことができます。
-
スタックテーブルリストに戻るにはテーブルで表示ボタンを選択してください。
注意事項
System.Threading.Thread.Sleep(Int32)
// System.Web.Http.ApiController.ExecuteAsyncの呼び出し比率は58.37%
System.Web.Http.ApiController.ExecuteAsync(System.Web.Http.Controllers.HttpControllerContext,System.Threading.CancellationToken)
// System.Web.Http.Controllers.ActionFilterResult.ExecuteAsyncの呼び出し比率は99.99%
System.Web.Http.Controllers.ActionFilterResult.ExecuteAsync(System.Threading.CancellationToken)
System.Threading.Thread.Sleep
← System.Web.Http.ApiController.ExecuteAsync
← System.Web.Http.Controllers.ActionFilterResult.ExecuteAsync
の呼び出し比率が58.37% * 99.99%を意味するものではありません。System.Web.Http.ApiController.ExecuteAsync
で他のモジュールの呼び出しの可能性が存在するためです。
トップスタックで呼び出し比率を判断する場合、各ステップ間の呼び出し比率を掛け合わせて、全体の呼び出し関係比率を算出してはいけません。トップスタックの呼び出し比率はStack Trace上に表示される情報のステップ間の呼び出し比率の算出した結果であるため、ステップ間の呼び出し比率から全体的な呼び出し比率を算出すると、歪んだ結果が得られる可能性があります。
ユニークスタック
ユニークスタックは、Stack Trace全体の正確な呼び出し情報に基づいて実行されたメソッドのセットが同じ場合の統計情報を提供します。
最もよく使われるスタックの情報を把握することができます。同じスタックが何度も繰り返しても、重複を排除することで、最も高い呼び出し頻度のスタックを確認できます。例えば滞積比率が高いStack Traceを識別することができます。詳細の呼び出しステップの検討により、呼び出し経路上に異常モジュールが存在するかどうかを把握することもできます。
各スタック項目では、メソッドの呼び出し経路(スタック)と当該メソッドの占める割合(パーセント)、全体の呼び出し件数(数)を表示します。各ステップ項目の一番左にボタンを選択すると、その呼び出しスタックのメソッド名、ファイル名、ライン番号などの問題分析に役立つ情報を提供します。