1

.NetベースのWebサイトがあり、本番サーバーで関数がデッドロックします。開発中の問題を再現することができませんでした。しかし、デッドロックが発生したかどうかを簡単に検出できる、つまりスレッド数が「通常の」50から100を超え始めていることを示す兆候が1つあります。

だから私がやりたいのは、スレッドの数が100を超えたときに、なんとかして情報をファイルにダンプすることです。情報は、スタックトレース、スレッドのコンテキストで実行されるオブジェクトなどです。問題。

単純なログを追加しようとしましたが、これを本番環境にログインするにはコストがかかりました。

これは実行中のサイトから行うことはできますか?このサイトは、.Net3.5を使用するIIS内で実行されています。

4

2 に答える 2

1

Visual Studioリモートデバッガーをインストールするサイトで、ソフトウェアの実行中にリモートシステムのソフトウェアの状態をリモートで調べることができます。

于 2012-09-05T08:13:27.113 に答える
1

また、スレッド数などのパフォーマンスカウンターの値に基づいて、プロセスのダンプを条件付きで生成できるMicrosoftのProcDumpを試すこともできます。ドキュメントの例を次に示します。

例:Outlookのハンドル数が10000を超えたときに、「outlook」という名前のプロセスのダンプを書き込みます。

C:> procdump outlook -p "\ Process(Outlook)\ Handle Count" 10000

あなたの場合、「HandleCount」の代わりに「ThreadCount」を指定し、値は10,000ではなく100になります。

また、IISを実行しているので、プロセス名はw3wpまたはそれに類似したものだと思います(「Outlook」の代わりにそれを使用してください)。

また、このプロセスはマネージコードを実行しているため、「-ma」スイッチを指定して、マネージプロセスのダンプを検査するために必要な完全なダンプを取得する必要もあります。

于 2012-09-05T12:44:51.403 に答える