问题描述
我正在尝试在客户的服务器(Win 2012R2)上调试一个问题,其中我们的一个.NET Web应用程序托管在他们的IIS(版本8.5.9600.16384)中。 最近,我们的技术支持在应用程序的Web.config文件中更改了一个次要的内部设置,并且根据他们的说法,没有对系统进行其他更改或操作。应用程序也没有更新,并且之前一直正常运行。
自那次更改以来,站点所配置的AppPool无法再启动。根据系统事件日志,有几个尝试的启动,每个都导致工作进程崩溃,直到池的快速故障保护完全停止启动过程。
另外,由于我在客户的服务器上,我只有有限的调试选项。
发现
由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 Monitoring Agent\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/
最终似乎只是回到了最初的问题,因为这是在转储中找到的唯一错误信息:PerfMon!DllGetClassObject+966fb上的汇编指令在来自Microsoft Corp.的C:\Program Files\Microsoft Monitoring Agent\Agent\APMDOTNETAgent\V8.0.10918.0\PerfMon.dll中引发了未知异常(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下运行 ---接下来是详细的错误日志。=== 预绑定状态信息 LOG:DisplayName=System.ServiceModel.Web,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35 (完全指定) LOG:Appbase=[app root path] LOG:初始PrivatePath=[app root bin directory] LOG:Dynamic Base=C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\bee9e73a LOG:Cache Base=C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\bee9e73a LOG:AppName=b83a4ee 调用程序集:(未知)。
因为一个相关联的程序集不符合条件APTCA共享模式,所以拒绝代码共享。
搜索任何关于此的信息,我只能找到与MVC3/MVC4有关的旧错误,需要进行配置更改。但这与此问题无关。 这也可能意味着原始错误根本与PerfMon无关,而是一种奇怪的副作用。
C:\Program Files\Microsoft Monitoring Agent\Agent\...
不是 IIS 中必需的组件。尝试在 web.config 或应用程序主机配置中搜索该路径并将其注释掉?猜测它安装了某个模块/处理程序,导致失败?可能只需要更新一下? - MisterSmith