这是my previous question的重复,虽然我的问题的目标现在完全不同了。
我时不时地,每周一次,只在我的开发机器中,在我做的Web应用程序中出现System.AccessViolationException。
由于我的机器有一些不能很好地运行的东西(比如偶尔出现蓝屏),我假设它可能是RAM故障。运行memtest 24小时后,我很确定它不是......
所以,情况就是这样:这是一个wep App,VB.Net 2.0,100%托管代码,不使用COM,Interop或类似的东西。它在Windows Server 2008 SP2上运行 我正在做的唯一“奇怪”事情就是在应用程序启动时启动我自己的3个线程,在appdomain中执行“cron like”内容,并且此应用程序正在处理的大多数请求都是异步处理的,并且很多它们在没有响应的情况下保持打开状态长达30秒。 (我正在做Comet长期投票)。
此外,我已经在这个代码上工作了大约一年了,而且大约一个月前才开始这样做。 在最近改变的整个网络应用程序中,我无法想到我改变了什么重大或重要的事情。我几乎完全在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,但找不到任何真正有用的东西......
一个月之前HAS发生变化的一件事,就是我想到的,是我在我的开发机器中从Server 2003 x86迁移到Server 2008 x64(因此,IIS6到IIS7)。也许这就是原因,但是,我仍然不确定该怎么做......
我的意思是,这会将问题完全排除在我的代码库之外,对吗?
更新按照建议here,将App Pool集成转为“Classic”似乎可以解决问题。我仍然在寻找一个不错的解决方案,或者至少是一个解释。
答案 0 :(得分:0)
不知道你的代码,我不知道这是多么实用,但你可以评论大量的代码,直到异常不再发生?如果可以,您可以使用binary search方法找出异常发生的位置。
答案 1 :(得分:0)
检查防病毒/病毒是否正在播放。这些程序可能会为每个进程安装错误的挂钩。
答案 2 :(得分:0)
我遇到类似“故障模块未知”类型崩溃的问题。就我而言,我有相反的情况,它正在SBS 2008机器上进行生产。我怀疑这是Windows的版本问题,但我不能确定。我通过记录缩小了它(这是一项服务,所以我能够写入事件日志)我会建议你可以选择,可能在
之内#If DEBUG
...
#End If
块。
您也可以按照JeffH的建议执行某些代码部分,也使用DEBUG测试,这样您只能在生产中执行该代码。
记录将是我的起点,因为它为您提供了崩溃发生时刚刚发生的事情的线索。如果它只发生了几天,那么我再次只在您的机器上写日志文件,以避免在日志文件变大时出现性能问题!
祝你好运......