19

IIS7.5でASP.NET4.0アプリケーションを実行しています。1日に数回、アプリケーションプールが予期せずリサイクルされています。これが発生すると、システムログに次のイベントが表示されます。

プロセスサービングアプリケーションプール「X」で、Windowsプロセスアクティベーションサービスとの致命的な通信エラーが発生しました。プロセスIDは「5768」でした。データフィールドにはエラー番号が含まれています。

また

アプリケーションプール「X」を提供するプロセスがpingに応答できませんでした。プロセスIDは「1032」でした。

ほとんどの場合、アプリケーションログには次のような対応するイベントが同時に発生します。

Faulting application name: w3wp.exe, version: 7.5.7600.16385, time stamp: 0x4a5bcd2b
Faulting module name: clr.dll, version: 4.0.30319.269, time stamp: 0x4ee9ae83
Exception code: 0xc00000fd
Fault offset: 0x00001916
Faulting process id: 0x508
Faulting application start time: 0x01cd4d8958ecf9ad
Faulting application path: C:\Windows\SysWOW64\inetsrv\w3wp.exe
Faulting module path: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Report Id: 8dcc413b-b98a-11e1-8075-001c23d6d910

そこで、 IISデバッグツールをインストールし、クラッシュルールを設定し、「特定のIIS Webアプリケーションプール」を指定し、初回例外のログを記録せず、[詳細設定](例外、ブレークポイント、イベント)の下に何も設定しませんでした。

また、次のコマンドラインを使用してWindowsデバッグツールからADPlusを(同時に)実行しています。

adplus -crash -pn w3wp.exe -NoDumpOnFirst -o c:\logs

ただし、デバッガーを接続したため、システムログにいくつかの「警告」レベルのメッセージが表示されました(「プロセスサービングアプリケーションプール「X」に関するメッセージは致命的な通信エラーが発生しました...」)が、アプリケーションログに対応するエラーレベルイベントが表示されなくなりました。

私が得ることができた唯一のものは次のとおりです(これらの約50がありました):

[6/18/2012 7:50:25 PM] Thread exited. Exiting thread system id - System ID: 3300. Exit code - 0x800703e9
[6/18/2012 7:50:25 PM] Thread exited. Exiting thread system id - System ID: 4992. Exit code - 0x800703e9
[6/18/2012 7:50:25 PM] Thread exited. Exiting thread system id - System ID: 5456. Exit code - 0x800703e9
[6/18/2012 7:50:25 PM] Thread exited. Exiting thread system id - System ID: 4924. Exit code - 0x800703e9

終了コード0x800703e9は、どこかでスタックオーバーフローを示しています。これは、見つけたら簡単に修正できるはずなので、幸いです。

ただし、これを行うには、クラッシュダンプからの詳細情報が必要です。これにより、WinDbgでクラッシュダンプを開き、「!clrstack」コマンドを使用して問題を特定できます。

私の質問は次のとおりです。デバッグツールが正しく構成されていませんか、それともイベントログを誤解していますか?「Windowsプロセスアクティベーションサービスとの致命的な通信エラー」に関するイベントがシステムログに表示されるたびに、アプリプールがリサイクルされているようですが、これらのイベントが発生したときにIISデバッグツールまたはADPlusからクラッシュダンプ情報を取得していません。また、何らかの理由で、デバッガーを接続したため、システムログの警告イベントに対応する「エラー」イベントがアプリケーションログに表示されなくなりました。理由はわかりません。問題がどこにあるかを把握できるように、CLR情報を含む完全なクラッシュダンプを取得する必要があります。

私が言及できる他の唯一のことは、Windowsエラー報告サービスが実行されていないということです。必要かどうかわからない。

助けてくれてありがとう。

4

1 に答える 1

5

アプリケーションログで取得した例外コードとスレッド終了コードの両方が、スタックオーバーフローがあることを示しています。しかし、スレッドがスタックオーバーフローエラーで終了したときにプロセスがクラッシュしない理由は不可解です。とにかく、スタックオーバーフロー例外でブレークを有効にするには、コマンドは次のとおりです。

sxe sov

アプリケーションプールは32ビットプロセスとして構成されているため、この場合はx86バージョンのデバッガーを使用する必要があることに注意してください。

于 2012-06-22T21:29:10.167 に答える