5

MySpace.comのチーフ システム アーキテクトである Dan Farino による素晴らしいプレゼンテーションがあり、特定のプロセスで実行されているすべてのスレッド (スレッドの実行内容、実行時間など) をカタログ化する Web ベースのスタック ダンプ ツールを紹介しています。 .)

彼らのテクニックは、 highscalability.comにもまとめられています。

  • パフォーマンスコレクター
    UDP によるパフォーマンス データの集中収集。Windows よりも信頼性が高く、あらゆるクライアントが接続して統計情報を表示できます。
  • Web ベースのスタック ダンプ ツール。
    問題のあるサーバーを右クリックして、.Net 管理スレッドのスタック ダンプを取得できます。以前は、システムに RDC を接続してデバッガーを接続し、1/2 後に回答を得なければなりませんでした。遅く、拡張性がなく、退屈です。単なるスタック ダンプではなく、スレッドが何をしているかについて多くのコンテキストを提供します。データベースで 90 個のスレッドがブロックされていることがわかり、データベースがダウンしている可能性があるため、トラブルシューティングが容易になります。
  • Web Base ヒープ ダンプ ツール。
    すべてのメモリ割り当てをダンプします。開発者にとって非常に便利です。手作業で何時間も節約できます。• プロファイラー。要求を最初から最後まで追跡し、レポートを生成します。URL、メソッド、ステータスなど、遅いリクエストを特定するのに役立つすべてを確認します。ロックの競合を調べたり、多くの例外がスローされたり、興味深いことは何でも調べます。非常に軽量。本番環境では、VIP (100 サーバーのグループ) ごとに 1 つのボックスで実行されています。10 秒ごとに 1 つのスレッドをサンプリングします。常にバックグラウンドでトレースします。

問題は、ASP.NET 用の Web ベースのスタック ダンプ ツールを構築するには、どのツールが必要かということです。便宜上、ターゲット AppDomain でホストされている *.aspx で、そのプロセスのすべてのマネージ コール スタックを出力できると仮定しましょう。

Mdbg (C#/IL で完全に記述され、CLR 2 SDK で出荷が開始されたマネージ コード用のデバッガー) と、通常は C:\Program Files\Microsoft Visual Studio 8\SDK\ にあるmdbgcoreアセンブリの使用をカバーする投稿がいくつかあります。 v2.0\ビン:

ソリューションは、単にこのアセンブリを参照して、目的の出力を生成しますか? 「管理されているすべての呼び出しスタックを一覧表示する」操作は、運用トラフィックを処理している実行中のプロセスにどのような影響を与えますか?

4

2 に答える 2

3

.Net のプロファイリング API が最適だと思います。

Asp.NET シナリオで動作するように適応および改善する方法を確認できるソース付きのライブ サンプルを入手するには、Google CodeのSlimTuneプロジェクトを参照してください。

よろしくマッシモ

于 2009-11-05T23:24:43.920 に答える
2

.Net のプロファイリング API を使用すると、サーバーを停止する必要があり、多くの CPU を消費します (ただし、呼び出されたすべてのメソッドを完全に制御できます)。

最も「簡単な方法」の解決策は、MDbg を使用してこれを行うことだと思います。StackDump という非常に小さいが便利なアプリをまとめました。このアプリ次のことを行います。1) デバッガーはアプリケーションを停止し、実行中のすべての CLR スタックのリストを生成します。プロセス。2) アプリケーションが再起動されます。この操作は迅速な操作であり、変更されていない運用コードを使用して実行中の運用サーバーで (おそらく) 実行できます。

これを管理するのは、わずか 80 行の .Net コードです。Codeplexでソース コードを公開しました。

于 2010-02-19T23:39:18.973 に答える