問題タブ [perfview]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net - 独立した要求のためのネストされた ASP.NET アクティビティ
私は perfview によって行われたこのようなトレースを持っています:
「スレッド時間」スイッチで撮影する必要があります。理解できないのは、アクティビティがこのようにネストされている理由です。ファイルのリクエストはブラウザによって個別に行われ、それらの間に関係はないと確信しています。基本的に、ファイルはキャッシュされるべきです。そのため、バイト配列は非同期で出力ストリームにコピーされます。
- アクティビティがネストされているのはなぜですか?
- また、mycontext の UNKNOWN_ASYNC は何を意味するのでしょうか?
編集:使用量がはるかに少ないプロダクションからのショットを追加しました。
私の質問は、何らかの形でパフォーマンス テストに関連していると思われます。負荷がかかった状態でこの動作を再現しようとします。
.net - perfview で RtlUsrThreadStart を解釈するにはどうすればよいですか?
PerfView で CPU スタックからのショットを見ると、最初のレコードを解釈する方法がわかりません。
CallTree のすべてのスレッドがこのフレームで始まるため、このレコードを安全に除外することはできません。しかし、私を悩ませているのは、フレームが排他的に181秒かかる理由と、3フレームの操作方法です。
CPU スタックで安全に無視する必要がありますか?
時間がかかるのは内部で何をしているのでしょうか(非常に多くの排他的な時間で表示されます)?
編集
GroupPats 部分で「グループなし」(空の文字列) を選択すると、ntdll!RtlUserThreadStart
フレームは最後になります (CPU 時間はほとんど「かかりません」)。内部で呼び出されるため、簡単に解釈できない低レベルの関数呼び出しもたくさんありますが、全体的に見るとはるかに優れています..
Edit2 (ユーザー用)
今日、PerfView セッションを撮影しました。サーバーアプリなのでスレッド数が多いです。したがって、ビューはシングルスレッドでは問題ありませんが、私の目的にはあまり価値がありません。基本的にBy Nameビューを見たかったのですが、そこにあるRtlUserThreadStartが何を意味するのかよくわかりません..
c# - 異なるスレッドから発行された ETW イベントに ActivityId がありません
そのため、開発マシンのコンソール アプリケーションでホストしている WCF サービスがあります。同じマシンでPerfViewを実行して、ETW (Event Tracing for Windows) イベントを収集しています。WCF サービスは TPL (Task Parallel Library) を利用しており、WCF 要求の存続期間全体にわたって、すべてのスレッドで ETW イベントを関連付けようとしています。私はクライアントとサーバーの間ではなく、サーバー上で厳密に話しています。ただし、PerfViewでイベントを見て、カスタムからのイベントのみにビューをフィルター処理すると、EventSource
一部のスレッドのイベントのみにActivityId
. 任意のスレッドについて、すべてのイベントに があるか、どのイベントにもないかのいずれかActivityId
です。また、どのイベントにもRelatedActivityId
.
このリンクはセマンティック ロギング アプリケーション ブロック (SLAB) に関連していますが、その中で次のことが言及されています。
TPL タスクを使用する場合、各スレッドは独自のアクティビティ ID を取得し、TPL スケジューリング コードは、ActivityId 値と RelatedActivityId 値を含む転送イベントを自動的に発行します。これらを使用して、関連するイベントを関連付けることができます。
それは私にはまったく当てはまらないようです。アクティビティ ID を関連付ける転送イベントが表示されないだけでなく、多くの場合、前述のように、アクティビティ ID が完全に欠落しています。
この SO の回答によると: https://stackoverflow.com/a/27620321/1937249 :
アウト プロセス リスナーを使用する場合、名前による TPL 構成が機能せず、代わりに GID が使用されるというバグがあります: https://slab.codeplex.com/workitem/62
そこで、イベント ソースの GUID を次のように名前の代わりにPerfView の「追加プロバイダー」に追加してみました。
しかし、違いはありませんでした。私のイベントは公開されましたが、それらの多くはまだそれらがなくActivityId
、すべてのイベントでそれらがありませんでしたRelatedActivityId
.
関連する可能性のある最後の 1 つのことは、フレームワークに組み込まれているものではなくMicrosoft.Diagnostics.Tracing
、NuGet パッケージの名前空間を使用していることです。Microsoft.Diagnostics.Tracing.EventSource
System.Diagnostics.Tracing
編集
TplEventSource からキャプチャされたすべてのイベント タイプを示す画像を次に示します。TplEventSource が有効になっていることを意味すると思います。リストに「移籍イベント」が表示されるべきなのか、それともイベントの 1 つに移籍であることを示すキーワードやその他のフィールドが必要なのか、はっきりしません。実際の「転送イベント」があると思われる場合、リストにそのようなものは表示されません。
PerfView の出力
EventSource
これは、単一の WCF 要求に対するカスタムのイベント リストの図です。リクエストがスレッド ID 10,724 で開始されていることがわかります。そのスレッドのすべてのイベントにはActivityId
. 「Asi-Geoservices/StartAuthenticateRequest/Start」は非同期データベース呼び出しを行い、アプリケーションはスレッド 8,268 で再開します。スレッド 8,268 のイベントにはActivityId
. 「Asi-Geoservices/StartServiceProviderRequest/Start」は非同期 HTTP リクエストを作成し、アプリケーションはスレッド 11,764 で再開します。ここでも、このスレッドの各イベントにはActivityId
. 「Asi-Geoservices/StartServiceProviderRequest/Stop」の後、別の非同期データベース呼び出しが行われ、アプリケーションがスレッド 8,268 で再び再開され、そこでリクエストが最終的に完了します。ActivityId
.
c# - Windows パフォーマンス アナライザーで EventSource アクティビティの期間を表示する
私は ETW とSystem.Diagnostics.Tracing.EventSourceに基づくいくつかのカスタム イベントをいじっています。それはすべて TPL でうまく機能しています。つまり、異なるスレッド間でも相互に関連するアクティビティが得られます。すべてが非常に優れています。PerfViewを使用して、これが正しく機能していることを検証しています。
分析でWindows Performance Analyzerの使用を開始したいと考えていますが、データ テーブルに表示されるアクティビティ期間に似たもの ( PerfViewの DURATION_MSEC 計算列など) を取得する方法がわかりません。Generic Events グラフのツールチップとして期間が利用できることに気付きました。この情報はツールで利用できるようです。
これをWPAで設定する方法を知っている人はいますか?
events - PerfView がカスタム ETW イベントをキャプチャできない
System.Diagnostics.Tracing.EventSource クラスを使用してイベントを発生させるデモ ソリューションがあります。私が持っているクラスは以下の通りです: -
こちらの手順に従って、PerfView ツールを使用して、このソリューションによって生成されたイベントを表示しました。*DemoEvent
PerfView の additionalProvider セクションで指定しました。ただし、PerfView の出力でこれらのイベントを確認できません。誰でもここで私を助けることができますか?