小编M.R*_*eck的帖子

如何调试 PerfMon.dll 中的 0xc0000409 错误?/ 装配绑定

问题描述

我正在尝试调试客户服务器 (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/

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

微软公司的 C:\Program Files\Microsoft Monitoring Agent\Agent\APMDOTNETAgent\V8.0.10918.0\PerfMon.dll 中 PerfMon!DllGetClassObject+966fb 的汇编指令导致线程 2 出现未知异常(0xc0000409)

这基本上是我已经从事件日志中得到的。

我在这里的主要问题不仅是可能的原因和解决此问题的潜在方法,还包括如何首先正确找到原因/解决方案。

更新

使用 Fusion Logs,我能够找到System.Web.DynamicDataSystem.Web.ExtensionsSystem.ServiceModel.web 的三个绑定错误。

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

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

=== 预绑定状态信息 === …

.net c# iis perfmon assemblybinding

5
推荐指数
1
解决办法
4132
查看次数

标签 统计

.net ×1

assemblybinding ×1

c# ×1

iis ×1

perfmon ×1