6

多くの I/O を生成するトラフィックの多い Web サイトを取得しました。10 分以内に 10 GB を超えるデータを読み取っています (問題の w3wp はタスク マネージャーに表示されます)。メモリとアプリケーションのハングについては、WinDbg を使用して成功しています。しかし、最高のI/Oを担当するプロセス内のオブジェクト/メソッドを見つける方法がわかりません。

これは可能ですか?

編集 質問: .NET アセンブリで I/O 操作をプロファイリングする方法はありますか。

4

3 に答える 3

6

ANTS パフォーマンス プロファイラー

私はこのツールを使用して大成功を収めました.5〜10分以内に大量のWebファームで最大512GBのメモリを消費する特定の命令を見つけることに対処しました. あなたと非常によく似た状況のように聞こえます。

さて、現実的に言えば、魔法のように問題が解決するわけではありません。まだ多くのセットアップ、徹底的な分析、および検出作業が必要です。しかし、このツールは問題を「実質的に解決不可能」から「数日以内に解決可能」に確実に変えました。

アップデート:

コメントで述べたように (そして Ben Emmett も同じように)、ANTS を使用してメモリ、ファイル システム ハンドル、ほとんどすべてのリソース消費を監視し、コール スタックをドリルダウンして特定のルーチンの影響を確認できます。

于 2013-02-25T01:19:14.433 に答える
1

アプリケーションの呼び出しコストとパフォーマンスを視覚的に表示するこのツールAppDynamics Liteを思いつきました。最もコストのかかる IO 操作を行っている関数を特定するのに役立つ場合があります。

引用;

応答時間、スループット、例外率、ガベージ コレクション時間などの主要なメトリックと、CPU、メモリ、ディスク I/O などの主要なシステム リソースを使用して、CLR の状態を把握します。

トライアル/30日間無料なので試してみる価値があります。それが役に立てば幸い。Ps: 私は AppDynamics とはまったく関係がありません。

于 2013-03-06T16:07:04.253 に答える
1

Windows Vista 以降でも動作する Windows 8の (無料の) Windows Performance Toolkitを使用できます。そこでは、システム全体のプロファイリングを有効にして、すべてのプロセスで何が起こっていたかを一度に確認できます。計装は必要ありません。WPRUI.exe によって自動的に行われる難解なレジストリ キーを設定するには、再起動が 1 回だけ必要です。

XPerf を使用すると、IO Init スタック ウォーキングを有効にして、開始されるすべての IO に対してコール スタックが取得されるようにすることができます。唯一の問題は、64 ビット プロセスのスタックが破損することです。つまり、OS のスタック ウォーク機能に Windows 7 のバグがあるため、コードの BCL メソッドの上の最初のメソッドのみが表示されます。

回避策は、アセンブリを Ngen にするか、Server 2012 に移行するか、プロファイリングのために x86 に切り替えて、より深いコール スタックを確認することです。

コール スタックがなくても、すべてのファイル IO と CPU アクティビティが表示され、ハード ディスクの使用時間に沿ったファイル名も表示されます。これにより、アプリのどの部分がディスク IO を引き起こしているかについての適切な情報が得られるはずです。部分的なコール スタックから、完全なスタックがなくても問題を特定できるはずです。

このツールは、使用方法を学ぶ必要がありますが、市販のどのプロファイラーよりもはるかに多くの洞察を提供します。コール スタックはコードまたはユーザー モードでは終了せず、カーネルで終了するため、ウイルス スキャナーが重大な IO 遅延を引き起こしているかどうかを判断することもできます。ただし、プロセッサがどのように機能するかを知る必要があります。このツールセットはもともとカーネル開発者を対象としていたため、役に立たない列が非常に多く表示される理由が説明されています。

下の図では、ファイル IO と CPU 消費量が積み上げられています。ディスク IO グラフで高 IO ファイルを選択すると、IO がアクティブである間に同時に実行された関連するすべてのコール スタックが CPU 消費量で強調表示されます。このようにして、IO からブロックされている可能性のあるスレッドに直接移動できます。

ここに画像の説明を入力

于 2013-03-07T06:48:19.017 に答える