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. 在windbg命令行输入“.loadby sos mscorwks”(不带引号)加载CLR调试工具
  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 回答