ASP.NET 4 アプリを新しいサーバー (2008 R2) に移行しましたが、ASP.NET ワーカー プロセスで時折発生するスタック オーバーフローという厄介な生産上の問題に悩まされています。
これらはイベント ログに記録されます。
Faulting application name: w3wp.exe, version: 7.5.7601.17514, timestamp: 0x4ce7afa2
Faulting module name: clr.dll, version: 4.0.30319.269, time stamp: 0x4ee9d6e1
Exception code: 0xc00000fd
Fault offset: 0x0000000000003fbc
Faulting process id: 0x17ec
Faulting application start time: 0x01cdb8e2663f86bc
Faulting application path: c:\windows\system32\inetsrv\w3wp.exe
Faulting module path: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
Report Id: 45eb70a1-24da-11e2-a0b9-005056ba357d
フォルト モジュールが MSVCR100_CLR0400.dll である場合もありますが、これは VC++ 再頒布可能パッケージからのものですが、プロジェクトのどこでも C++ が使用されているとは思いません。
Windows は、Visual Studio で開いたダンプをログに記録するのに十分親切です。「w3wp.exeにシンボルがロードされていません」と不平を言ったので、デバッグしようとしたときに逆アセンブリを取得できただけで、コールスタックは単一のエントリでした:
clr.dll!000007fef9afd01b()
これは、clr.dll である障害モジュールの場合です。モジュールが MSVCR100_CLR0400.dll の場合、例外の別のケース:
MSVCR100_CLR0400.dll!000007fef9a3c9fa()
[Frames below may be incorrect and/or missing, no symbols loaded for MSVCR100_CLR0400.dll] MSVCR100_CLR0400.dll!000007fef9a57fcb()
MSVCR100_CLR0400.dll!000007fef9a33ee4()
MSVCR100_CLR0400.dll!000007fef9a33f5d()
clr.dll !000007fef9b05a08()
障害が私のコードからではなく、CLR / ASP.NET 内から発生していることはかなり説得力があるように見えます-無限再帰によってスタック オーバーフローを強制するテスト アプリをまとめました。ダンプを取得してVSで分析し、デバッグすると、再帰呼び出しの正確な行にヒットします。
一方、障害はアプリケーションの特定の行で発生するため、ランダムな影響ではありませんが、毎回ではなく、たまに発生するだけであり、運用環境以外で再現されたことはありません.
これは並行性の問題でもありません。オンライン ユーザーが 1 人しか記録されていません。
言うまでもなく、私は基本的なトラブルシューティング手法を試しました - どこでも try-catch を試し、各行の後にログを記録し、Application_Error - 何もしませんでした。ある時点で実行が停止し、Windows ログにエラー エントリが記録される
アプリ プールは統合モードであり、この目的のために作成されたサービス アカウントで実行されます。