web-dev-qa-db-ja.com

w3wp clr.dllエラーをデバッグする方法

私のクライアントには、2つの運用サーバーにインストールされたASP.NETアプリケーションがあります(NLBとバランスが取れていますが、それは無関係です)。両方のサーバーが3〜4時間ごとにクラッシュし、次のイベントビューアーがエラーを記録しました。

障害のあるアプリケーション名:w3wp.exe、バージョン:7.5.7601.17514、タイムスタンプ:0x4ce7afa2
障害モジュール名:clr.dll、バージョン:4.0.30319.18034、タイムスタンプ:0x50b5a783
例外コード:0xc00000fd障害オフセット:0x000000000001a840
プロセスIDのエラー:0xd50
アプリケーションの開始時間のエラー:0x01ce97fe076d27b4
アプリケーションパスのエラー:c:\ windows\system32\inetsrv\w3wp.exe
モジュールパスの障害:C:\ Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dllレポートID:e0c90a5f-0455-11e3-8f0e-005056891553

デバッグ方法やどこから始めればいいのかわかりません。クラッシュが発生しそうになると、サーバープロセッサの使用率は100%にジャンプし、そのままになります。障害のあるプロセスはw3wp.exeです。私のコードがエラーを生成しているかどうかさえわかりません。 IIS 7.5。どんなポインタでも大歓迎です。

40
cristi71000

StackOverflow Exceptionが発生しているようです。これは、無制限の再帰(関数自体の繰り返し呼び出しなど)が原因です。これは、通常のtry/catchブロックでは捕捉できません。 DebugDiagおよびWinDbgを使用して問題を追跡できます。

DebugDiagは、StackOverflowExceptionが発生したときにクラッシュダンプを生成するように構成できます。 https://www.Microsoft.com/en-us/download/details.aspx?id=49924 からダウンロードします。

  1. DebugDiagを開き、[ルールの追加]をクリックします。
  2. 「クラッシュ」はすでに選択されているはずです。次へをクリックします。
  3. 「特定のIIS Webアプリケーションプール」を選択し、[次へ]をクリックします。
  4. アプリケーションプールを選択し、[次へ]をクリックします。
  5. [詳細設定]ウィンドウが表示されます。 [詳細設定]の下の[例外]をクリックします。
  6. [例外の追加]をクリックし、[スタックオーバーフロー]を選択します。アクションタイプは[完全ユーザーダンプ]です
  7. [OK]をクリックし、保存して閉じます。

次回StackOverflowExceptionが発生すると、クラッシュダンプが発生します。ダンプファイルを解釈する必要があります。

Windows用のデバッグツールはWindows SDKの一部であり、 http://msdn.Microsoft.com/en-US/windows/hardware/gg463009/ からダウンロードできます。

  1. WinDbgを使用するには、シンボルファイルを取得する必要があります。 シンボルファイルをダウンロードする をローカルフォルダーに配置します。
  2. WinDbgを開きます。 [ファイル]メニューの[シンボルファイルパス]をクリックします。
  3. シンボルパスボックスで、ドキュメントは次のコマンドを入力するように指示しています:SRV*your local folder for symbols*http://msdl.Microsoft.com/download/symbols、しかし、私はシンボルのローカルフォルダーに入れただけで、うまくいきました。
  4. 終了してWinDbgを再度開き、クラッシュダンプを開いて、DebugDiagによって作成されたダンプファイルを見つけます。
  5. コマンドラインに.loadby sos clrと入力します
  6. ここで!CLRStackと入力します

結果では、問題が明確になっているはずです(繰り返し呼び出されていた関数を示す行のBUNCHが表示される可能性があります)。

67
MikeSmithDev

上記の回答への追加。ユーザーのログイン時にエラーが発生したエクスプローラー拡張機能を開発します。そのため、ユーザーにとっては「画面のフラッシュ」に見えます(Explorerは起動とクラッシュを試みてから、再起動するなど)。 DebugDiagとWinDbgをインストールした別のユーザーアカウントでログインしました。今日(2014年1月13日)にすべての最新の更新を含む.NET 4.0でWindows 8.1を使用していますが、ローカルでいくつかのシンボルをダウンロードしようとしましたが、署名が正しくないためWinDbgはclr.pdbをロードできません。

オンラインでシンボルを使用して解決しました-「SRV * http://msdl.Microsoft.com/download/symbols 」をシンボルパスとして使用します。

2

別の原因は「無限再帰的に機能する」可能性があります。 infitine loopが発生すると、Windowsはデッドロックを回避し、関連するアプリケーションプールを無効にします。

今日も同じ問題に遭遇しました。 parentproject-subプロジェクトをリストする再帰関数があります。 1つのプロジェクト自体が親プロジェクトに設定されており、問題のある機能がすべての親サブプロジェクトをリストしようとすると、無限ループが発生します。

0
Dreamcatcher

イベントビューア-> Windowsログ->システムを確認して見つけることができました

アプリケーションプール 'DankAppPool'は、そのアプリケーションプールにサービスを提供するプロセスでの一連の障害のために自動的に無効にされています。

その下:

アプリケーションプール 'DankAppPool'を提供するプロセスは、Windowsプロセスアクティブ化サービスとの致命的な通信エラーを経験しました。プロセスIDは「5704」でした。データフィールドにはエラー番号が含まれています。

そして:

QueueMonitorサービスは予期せず終了しました。これは32回行われました。次の修正アクションが60000ミリ秒で実行されます。サービスを再起動します。

少なくともQueueMonitorサービスは開始する場所です。

0
sirdank