如何调试PerfMon.dll中的0xc0000409错误? / AssemblyBinding

时间:2018-07-25 11:18:10

标签: c# .net iis perfmon assemblybinding

问题描述

我正在尝试调试客户服务器(Win 2012R2)上的问题,在该服务器上,我们的.NET Web应用程序之一托管在其IIS(版本8.5.9600.16384)中。 最近,我们的技术支持人员之一更改了该应用程序的Web.config文件中的一个较小的内部设置,并且据此,对系统进行了其他任何更改。该应用程序也未更新,并且之前运行时没有任何问题。

由于发生了更改,因此无法再启动在其中配置了站点的AppPool。根据系统事件日志,尝试启动的次数很少,每次都会导致工作进程崩溃,直到池的Rapid-Fail Protection完全停止启动过程为止。

此外,由于我在客户的服务器上,因此调试选项也很有限。

发现

WAS在系统事件日志中报告:

  

为应用程序池“ [我们的池]”提供服务的进程与Windows进程激活服务发生致命的通信错误。进程ID为“ 5664”。数据字段包含错误号。

     

由于为该应用程序池提供服务的过程中发生了一系列故障,因此自动禁用了应用程序池“ [我们的池]”。

查看相应的应用程序错误日志将显示以下内容:

  

故障处理应用程序名称:w3wp.exe,版本:8.5.9600.16384,时间戳:0x52157ba0   故障模块名称:PerfMon.dll,版本:8.0.10977.0,时间戳:0x59cfb424   异常代码:0xc0000409   故障偏移量:0x000f8c7b   故障进程ID:0x1620   错误的应用程序开始时间:0x01d423ff75bef49f   错误的应用程序路径:C:\ Windows \ SysWOW64 \ inetsrv \ w3wp.exe   错误的模块路径:C:\ Program Files \ Microsoft监视代理\ Agent \ APMDOTNETAgent \ V8.0.10918.0 \ PerfMon.dll   报告ID:b56327b3-8ff2-11e8-80d5-005056a52299   故障包全名:   与程序包相关的应用程序ID错误:

在搜索该问题时,我主要关注PerfMon.dll问题和提供的错误代码0xc0000409,这显然与损坏的注册表项或堆栈缓冲区溢出有关,但是在两种情况下,我都无法找出原因。

我也尝试了此处描述的故障转储分析 https://blogs.msdn.microsoft.com/parvez/2016/08/06/iis-application-pool-crash-and-debug-diag/

但是最终,这似乎只是对原始问题的往返,因为这是转储中发现的唯一错误:

  

来自Microsoft Corp.的C:\ Program Files \ Microsoft监视代理\ Agent \ APMDOTNETAgent \ V8.0.10918.0 \ PerfMon.dll中PerfMon!DllGetClassObject + 966fb上的汇编指令已导致线程上出现未知异常(0xc0000409) 2

基本上已经从事件日志中得到了什么。

我在这里的主要问题不仅是可能是什么原因以及对该问题的潜在解决方案,而且是如何首先正确地找到原因/解决方案。

更新

使用Fusion Logs,我能够找到三个针对 System.Web.DynamicData System.Web.Extensions System.ServiceModel.web的绑定错误。

  

操作失败。   绑定结果:hr = 0x80004005。未指定错误

     

从以下位置加载程序集管理器:> C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ clr.dll   在可执行文件C:\ Windows \ SysWOW64 \ inetsrv \ w3wp.exe下运行   ---详细的错误日志如下。

     

===预绑定状态信息===   日志:DisplayName = System.ServiceModel.Web,版本= 4.0.0.0,区域性=中性,PublicKeyToken = 31bf3856ad364e35    (完全指定)   日志:Appbase = [应用程序根路径]   日志:初始PrivatePath = [应用程序根bin目录]   日志:动态基础= C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files \ root \ bee9e73a   日志:缓存库= C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files \ root \ bee9e73a   日志:AppName = b83a4ee   调用程序集:(未知)。

     

由于从属程序集与条件APTCA共享模式不匹配而拒绝代码共享

搜索有关此的任何信息,我只能找到与MVC3 / MVC4相关的旧错误,需要进行配置更改。不过,这与这个问题无关。 这也可能意味着原始错误与PerfMon完全无关,并且原始错误只是一个怪异的副作用。

1 个答案:

答案 0 :(得分:0)

仅想补充一下,我们现在在Windows Server 2012上存在此(或非常相似)问题,并通过删除Microsoft Monitoring Agent APM服务来解决此问题,如这篇相当出色的博客文章所述:http://kevingreeneitblog.blogspot.com/2017/03/scom-2016-agent-crashing-legacy-iis.html < / p>

(博客文章中描述的问题可能仅影响在旧版.NET Framework版本上运行的应用程序,但是我们在仅运行版本4的应用程序池中遇到过经验。)

从我们的事件日志中:

Faulting application name: w3wp.exe, version: 8.5.9600.16384, time stamp: 0x52157ba0
Faulting module name: PerfMon.dll, version: 8.0.11072.0, time stamp: 0x59c01c4c
Exception code: 0xc0000409
Fault offset: 0x000f8c7b
Faulting process id: 0x1ae8
Faulting application start time: 0x01d4eac448929ba3
Faulting application path: C:\Windows\SysWOW64\inetsrv\w3wp.exe
Faulting module path: C:\Program Files\Microsoft Monitoring Agent\Agent\APMDOTNETAgent\V8.0.11072.0\PerfMon.dll
Report Id: 8a700b62-56b7-11e9-8124-001dd8b71cba
Faulting package full name: