ASP.NET / IIS6:尝试读取或写入受保护的内存。这通常表明其他内存已损坏

时间:2009-12-15 22:52:33

标签: asp.net iis-6

我的生产服务器上出现以下错误:

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

它不会一直发生,但似乎在高流量时期最常发生。

错误发生在自定义IHttpHandler

当异常发生时,堆栈跟踪并没有给出很多关于实际发生情况的指示 - 它所指示的区域中发生的一切都是使用Response.Write写入响应。

我注意到,当这种情况开始发生时,如果我从服务器中删除流量,回收应用程序池并将其重新打开,它似乎有所帮助。但是,当首次返回流量时,在开始正常工作之前会出现一组这些错误。

我还看了几十个其他SO问题/谷歌搜索结果,但是没有一个补救措施似乎与这种情况有关。

编辑:我没有直接使用非托管/不安全代码。我确实使用MEF,我不确定它是否确实如此。

4 个答案:

答案 0 :(得分:0)

不,这不是服务器故障问题。这显然是一个编程问题。

IHttpHandler代码究竟在做什么?它是否与任何非托管代码交互?

BTW,异常消息意味着它所说的内容。

答案 1 :(得分:0)

您的自定义处理程序是否已管理?此消息通常表明问题在于非托管代码 - 损坏的指针等等。

答案 2 :(得分:0)

我已经看到当应用程序池在重负载下回收并且已经被刷新并释放的内存时会发生这种情况,但是对它的引用仍然存在。 IHTTPHandler是否使用P / Invoke或非托管/不安全代码执行任何操作?

答案 3 :(得分:0)

很可能与ASP.NET是一个多线程并且在IHttpHandler中使用非线程安全代码这一事实有关。

可能是其中之一:

  • COM对象(例如Excel,Word自动化或类似文件)
  • Native Win32 API(P / Invoke)

因此,您需要提供有关您在处理程序中的具体操作的更多信息。