問題タブ [xperf]
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.
c++ - KCacheGrind などの WPR/xperf プロファイリング データからの関数呼び出しの集約?
WPR/xperfプロファイリング データをKCacheGrindにロードすることは可能ですか? または、 WPAで関数呼び出しを直接集約する方法はありますか? それとも他のツール?gprof2dot /graphvizルートが最良の選択肢でしょうか?
WPA は便利だと思いますが、「CPU 使用率 (サンプリング)」テーブルでスタックごとにグループ化すると、集計された関数呼び出し数で並べ替えることができないようです。たとえば、関数foo
が 10 の異なる場所から均等に呼び出された場合foo
、10 のコード パスのそれぞれがfoo
10% 以下の重みとして表示されるため、潜在的なボトルネックとして特定するのは困難です。KCacheGrind は、各関数の累積時間でソートできるようにすることで、この問題を解決します。
たとえば、malloc のような低レベルの共有関数をボトルネックとして特定するために、Windows でプロファイリングを使用して各関数で費やされた累積時間で並べ替えるにはどうすればよいですか?
node.js - xperf を使用して nodejs のコール スタックを調べる方法は?
Node.js アプリケーションのパフォーマンス チューニングを学ぼうとしています。私が最初に欲しいのはフレームグラフです。私は Windows プラットフォームで作業しているので、このマニュアルに従ってフレームグラフを取得します。
しかし、私はこの段階でスタックしています:
xperf -i perf.etl -o perf.csv -symbols
私はxperfが苦手です。この問題を解決してフレームグラフを取得する方法を誰かに教えてもらえますか?
performance - xperf (Windows Performance Toolkit) を使用して CPU 使用率のサンプリングを収集する方法
長いプロセス (6 ~ 8 時間) のパフォーマンスを分析したい。作成/終了したプロセス (コマンド ラインを使用) と CPU 使用率に関する情報が必要です。
Windows Performance Analyzer (wpa.exe/xperfview.exe) は分析に最適なツールであることがわかりました。パフォーマンス データ コレクターを作成し、プロバイダー 'Windows Kernel Trace'、キーワード 'process' を選択して、プロセスに関する情報を取得しました。
しかし、サンプリングで CPU 使用率に関する情報を収集する方法が見つかりません。そんなこと知ってる
xperf.exe -on ベース
CPU 情報を収集しますが、情報が多すぎます...
また、パフォーマンス カウンターで CPU 使用率を *.blg ファイルとして収集できますが、このファイルを Windows パフォーマンス アナライザーに読み込むことができません。:(
何か案は?
udp - WPA は、NIC ドライバー DPC フラグメントが 232 ミリ秒間実行されていることを示しています
8 つの論理 CPU を搭載したマシンで UDP プロキシのストレス テストを行っています。UDP クライアント数が約 14,000 になると、CPU の 1 つ (CPU 4) が急上昇し始め、UDP スループット (タスク マネージャーで表示) がゼロに落ち込みます。私は WPR を使用してスパイク時の CPU 使用率を記録しました。WPA は、CPU 4 が他のすべての CPU (それぞれ約 5K) の 2 倍の DPC/ISR フラグメント (約 11K) を処理していることを示しています。最長の DPC フラグメントは 232 ミリ秒実行され、次の 5 つの DPC フラグメントはすべて 100 ミリ秒以上実行され、次の 57 は 1 ~ 90 ミリ秒で実行されました。
フラグメントは、「DPC または ISR が中断されずに実行された期間」として定義されます。( https://msdn.microsoft.com/en-us/library/windows/hardware/jj679884.aspxを参照)
Microsoft は、DPC フラグメントを 100 マイクロ秒以内で実行することをお勧めします! ( https://msdn.microsoft.com/en-us/library/windows/hardware/ff546551(v=vs.85).aspxを参照)
bxvbda.sys はモジュール (Broadcom NetXtreme II GigE VBD) であり、um_bdrv_dpc はこれらすべての実行時間の長い DPC フラグメントの関数です。
私の質問は、DPC の WPA データを正しく解釈していますか?
etw - WPA でのスレッド数のグラフ化
プロセス内のスレッド数をグラフ化したいのですが、ThreadID 列を見つけて、時間をかけて確認したい Unique Count 集計を設定しました。青いバーの右側にこのフィールドだけがありますが、グラフは表示されません (はい、凡例の色を選択しました)。
これはどのように可能ですか?
etw - Windows パフォーマンス アナライザーがクラッシュする
私は、過去 1 か月前に WPRUI および WPA アプリケーションを正常に使用して、C++ アプリケーションのパフォーマンスの問題を特定しました。しかし、今日、そのうちの 1 つの新しいトレースを記録し、それを開いて WPA がクラッシュしていることを確認しました。ETL を開き、Graph Explorer -> Computation -> CPU Usage (sampled) -> unfold に移動することで、毎回再現可能です。クリックするだけで、CPU サンプリング グラフ リストが表示されます。サイレントにクラッシュすることもあれば、クラッシュをデバッグできるダイアログが表示されることもあります。このような問題を経験した人はいますか?Windows Performance Toolkit サイトにサポート フォーラムがありません。もちろん、これに対する解決策を見つけたいと思っています。事前に感謝します。
PS: 再インストールしても意味がありません。ユーザー設定の削除も同様です。スタックは、「タスク」クラスで範囲外のメモリにアクセスする問題のみを示しましたが、デバッグダイアログを再度表示することはできません (毎回サイレントにクラッシュしています)。
PS2: この 1 か月で覚えている唯一の重要な変更は、Visual Studio 2015 の CTP をインストールし、保留中のパッケージを Windows でアップグレードできるようにしたことです (私は上限のあるサブネットワークにいて、Windows は自動的にアップグレードしません)。 )。
c# - xperf WinDBG C# .NET 4.5.2 アプリケーション - プロセス ダンプについて
重い負荷の下で、私たちのアプリケーションは強力なサーバーを 100% の CPU 使用率にしています。プロセス ダンプを読み取り、スレッドを確認すると、そのうちのいくつかは 10 分経過しています。!CLRStack を使用する場合、それらのどれも私に何の洞察も与えません。
暴走は私に与えています:
これらのスレッドの 1 つで !DumpStack を呼び出すと、次のようになります。
それは私に何を言っているのですか?CLR への呼び出しがたくさんありますが、どこに問題があるのかわかりません。.reload (Thomas による提案) の後、GC 呼び出しが表示されるようになりました。
更新 1
xperf を実行した後、各 w3wp.exe は CPU の約 45% を消費しています。それらの1つでフィルタリングし、関数でグループ化すると、「?」というラベルの付いた関数があります。それが 13.62% を占め、その他は 2.67% 以下です。この「?」が何であるかをどうやって知ることができますか?
更新 2
xperf を再度実行すると、関数JIT_MonEnterWorker_InlineGetThread_GetThread_PatchLabel
が CPU 使用率の 12.31% を占めています。「?」機能はそのままです。
スタックによるグループ化:
ご覧のとおり、これらの 2 つは CPU 使用率の 27% 以上を占めています (各プロセスについて、かなり重要です)。
アップデート 3
wpr.exe を使用した後 (@magicandre1981 による提案):
FormsAuthentication と、クリティカル パスでの Ninject への不要な呼び出しが、CPU 使用率の約 16% を占めていることがわかりました。10分以上実行されているスレッドをまだ理解していません。
更新 4
DebugDiag (@leppie からの提案) を試してみたところ、ハングしているスレッドがすべて次のようになっていることが確認されました。
または StackExchange.Redis によるもの:
また
window - wpaexporter (Windows Performance Toolkit) を使用して完全なスタックをテキスト ファイルにエクスポートする方法
"Windows Performance Toolkit"
utilityを使用して完全なスタックをテキスト ファイルにエクスポートする方法wpaexporter
。私はこのコマンドを使用していますが、これは完全なスタックではなくルート要素のみを提供します。
xperf - xperf - 指定された ETW イベントのペアに対してプロセスによって消費される CPU サイクル
シナリオ: 1. Xperf を開始しました。
- アプリが起動します。アプリには ETW イベント (E1、E2) があります。
- アプリの実行中に ETW(E1,E2) イベントが発生し、(T1,T2) は (E1, E2) イベントに対応するタイムスタンプです。
- Xperf を停止します。ETL ファイルが生成されます。
- (T1,T2) タイムスタンプは ETL ファイルから取得されます。
クエリ: xperf を使用してタイムスタンプ (T1、T2) 間でアプリによって消費される CPU サイクルを取得する方法は?
callstack - 「ジェネリック イベント」のコール スタックがないのはなぜですか
私は読んだ
および他のソースですが、私がやりたい最も簡単なことは、WPA の "Generic events" グラフに "Stack" 列を表示することです。
なぜそこにないのですか?確かに、スタック情報が利用できないためですが、なぜですか? 「xperf -help stackwalk」は知っていますが、リストされているものは探しているものではありません。例えば、
ネットワーク イベントのコールスタックを取得できません。なんで?私は何かが欠けているに違いない。ありがとう!