0

这与我之前的问题有点重复,尽管我的问题的目标现在完全不同了。

我不时地每周一次,仅在我的开发机器中,在我制作的网络应用程序中出现 System.AccessViolationException。

由于我的机器有一些不能很好地工作的东西(比如不时出现蓝屏),我之前假设它可能是内存故障。运行 memtest 24 小时后,我很确定它不是......

所以,情况就是这样:这是一个 wep 应用程序,VB.Net 2.0,100% 托管代码,不使用 COM、Interop 或类似的东西。它在 Windows Server 2008 SP2 机器上运行。
我正在做的唯一“奇怪”的事情是在应用程序启动时启动我自己的 3 个线程,这些线程在 appdomain 内执行“类似 cron”的操作,而且这个应用程序正在处理的大多数请求都是异步处理的,其中许多它们保持打开状态长达 30 秒没有响应。(我正在做彗星长轮询)。

另外,我已经在这个代码上工作了大约一年,而且大约一个月前才开始这样做。在我最近更改的整个 Web 应用程序上,我想不出任何重大或重要的更改。我几乎完全在 Javascript 前端工作。


当异常发生时,我会收到一个典型的弹出窗口,询问我是否要调试。当我这样做时,我看到所有 ASP.Net 线程加上我的 3 个线程。
我的 3 个线程正在调用 Sleep(),这是正常的。所有其他 ASP.Net 线程根本没有调用堆栈。
在 Visual Studio 告诉我出现异常的线程中,我什么也没看到。

所以我不确定错误发生在哪里,甚至不知道它是否每次都发生在同一个地方。

我能在“应用程序”事件日志中找到一个线索:

Faulting application w3wp.exe, version 7.0.6002.18005, time stamp 0x49e03238, 
faulting module unknown, version 0.0.0.0, time stamp 0x00000000, exception code 
0xc0000005, fault offset 0x0000000002358fe8, process id 0x1f4c, application 
start time 0x01ca41395c564ed9.

在那之后,另一个事件是这样的:

An unhandled exception occurred and the process was terminated.

Application ID: DefaultDomain    
Process ID: 6632    
Exception: System.AccessViolationException

Message: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

StackTrace:    at System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr pHandler, RequestNotificationStatus& notificationStatus)
   at System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr managedHttpContext, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)
   at System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr managedHttpContext, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)

我用谷歌搜索了 MgdIndicateCompletion ,但找不到任何真正有用的东西......

大约一个月前发生了变化,现在我想起来了,就是我在我的开发机器上从 Server 2003 x86 迁移到了 Server 2008 x64(因此,从 IIS6 迁移到 IIS7)。也许这就是原因,但我仍然不知道该怎么做......

我的意思是,这会将问题完全排除在我的代码库之外,对吗?


更新:如此处所建议将应用程序池集成转为“经典”似乎可以解决此问题。不过,我仍在寻找一个体面的解决方案,或者至少是一个解释。

4

3 回答 3

0

Check if antivirus/virus is playing a part. These programs may install faulty hooks to every process.

于 2009-10-27T17:46:59.323 回答
0

不知道您的代码,我不知道这有多实用,但是您能否注释掉大量代码,直到异常不再发生?如果可以,您也许可以使用二进制搜索方法来找出异常发生的位置。

于 2009-10-14T16:42:44.557 回答
0

我遇到了类似的“故障模块未知”类型崩溃问题。在我的情况下,我有相反的情况,它发生在 SBS 2008 机器上的生产中。我怀疑问题出在 Windows 的版本上,但我不能确定。我已经通过记录来缩小范围(这是一项服务,所以我可以写入事件日志),我建议你可以选择,可能在

#If DEBUG
    ...
#End If

堵塞。

您也可以只执行 JeffH 建议的代码的某些部分,也可以使用 DEBUG 测试,因此您只能在生产中执行该代码。

不过,日志记录将是我的起点,因为它可以为您提供有关崩溃发生时刚刚发生的事情的线索。如果它只是每隔几天发生一次,那么我将再次只在您的机器上写入日志文件,以避免日志文件变大时出现性能问题!

祝你好运...

于 2016-02-21T17:54:12.923 回答