3

IIS 6.0 でアプリケーション プールがランダムにクラッシュし続けます。MS Debug Diag は毎回 kernel32.dll を指します。

エントリ ポイントは常に mscorwks!CreateApplicationContext+bbef であり、結果は常に System.UnauthorizedAccessException になります。

スタックトレース:

Function                                       Arg 1        Arg 2        Arg 3   
kernel32!RaiseException+3c                     e0434f4d     00000001     00000001    
mscorwks!GetMetaDataInternalInterface+84a9     18316b3c     00000000     00000000    
mscorwks!GetAddrOfContractShutoffFlag+ac01     18316b3c     00000000     023cfbd8    
mscorwks!GetAddrOfContractShutoffFlag+ac73     00000000     000e8c88     8038b2d0    
mscorwks!GetAddrOfContractShutoffFlag+aca4     18316b3c     00000000     023cfbe4    
mscorwks!GetAddrOfContractShutoffFlag+acb2     18316b3c     acc05c33     7a399bf0    
mscorwks!CoUninitializeCor+67be                00000000     023cfc1c     023cfc8c    
mscorwks!CoUninitializeCor+87a1                001056e8     79fd87f6     023cfeb0    
mscorwks!CorExitProcess+4ad3                   023cfeb0     023cfd20     79f40574    
mscorwks!CorExitProcess+4abf                   001056e8     79f405a6     023cfd04    
mscorwks!CorExitProcess+4b3e                   000e8c88     00000000     023cfda7    
mscorwks!StrongNameErrorInfo+1ddab             00000000     00000000     023cfeb0    
mscorwks!StrongNameErrorInfo+1e07c             023cfeb0     00000000     00000000    
mscorwks!CoUninitializeEE+4e0b                 023cfeb0     023cfe5c     79f7762b    
mscorwks!CoUninitializeEE+4da7                 023cfeb0     acc05973     00000000    
mscorwks!CoUninitializeEE+4ccd                 023cfeb0     00000000     001056e8    
mscorwks!GetPrivateContextsPerfCounters+f1cd   79fc24f9     00000008     023cff14    
mscorwks!GetPrivateContextsPerfCounters+f1de   79fc24f9     acc058c3     00000000    
mscorwks!CorExeMain+1374                       00000000     00000003     00000002    
mscorwks!CreateApplicationContext+bc35         000e9458     00000000     00000000    
kernel32!GetModuleHandleA+df                   79f9205f     000e9458     00000000   

これが何を意味し、それを修正する方法を知っている人はいますか?

編集:上記のスタック トレースは症状であり、原因ではないことが判明しました。上記のスタック トレースはアンマネージド スタックのみを示していますが、問題はマネージド コードで発生しています。以下の回答の手順を使用して、クラッシュ ダンプを掘り下げ、マネージド例外を抽出しました。

4

3 に答える 3

9

mscorwks.dll への参照は、問題の兆候にすぎません。mscorwks.dll は、共通言語ランタイムを含む dll です。

問題の根本原因を診断するために、次の手順に従いました。

  1. IIS がアプリ プールをリサイクルしたときに、DebugDiagを使用してクラッシュ ダンプをキャプチャします。
  2. windbgでクラッシュ ダンプを開きます。
  3. CLR デバッグ ツールをロードするには、windbg コマンド ラインで「.loadby sos mscorwks」(引用符なし) と入力します。
  4. !PrintException コマンドを使用して、クラッシュ ダンプに記録された最後の例外を出力します。これは、IIS アプリ プールのリサイクルを引き起こした可能性が最も高いものです。
  5. !clrstack コマンドを使用して、例外をスローした現在のスレッドのスタックを表示します。
  6. Windbg のその他のコマンド リファレンスは、ここここにあります。最後に、この MSDN ブログには、windbg の使用に関する優れたチュートリアルがあります。

デバッグの冒険を頑張ってください!

于 2009-09-14T13:44:18.920 に答える
0

Ryan さん、未処理の例外の動作が変更されたことは知っています。NET Framework 1.0 または 1.1 から、未処理の例外は無視されました。2.x 以降では、未処理の例外によってワーカー プロセス (アプリ プール) がクラッシュします。以下を web.config に追加して無視します (ただし、クラッシュする理由を確認する必要があります!)

<configuration>
<runtime>
<legacyUnhandledExceptionPolicy enabled="true" />
</runtime>
</configuration>

これでうまくいくかもしれません。. .

于 2010-01-04T20:44:27.373 に答える
0

シンボルが壊れています - 修正すると、より意味のあるコール スタックが得られるでしょう。

于 2010-01-04T20:45:11.663 に答える