应用程序池"Classic .NET AppPool"正在运行的一个进程与Windows进程激活服务发生致命通信错误。

37

我在Windows Server 2008的IIS 7上运行一个ASP.NET 3.5 Web应用程序。

今天下午我收到了以下错误:

HTTP错误503. 服务不可用。

我查看了事件日志,并发现:

Classic .NET AppPool应用程序池的一个进程与Windows Process Activation Service之间发生了致命的通信错误。进程ID是'3328'。数据字段包含错误编号。

以下是该事件的完整详细信息:

Log Name:      System
Source:        Microsoft-Windows-WAS
Date:          18/09/2009 14:58:31
Event ID:      5011
Task Category: None
Level:         Warning
Keywords:      Classic
User:          N/A
Computer:      computername
Description:
A process serving application pool 'Classic .NET AppPool' suffered a fatal communication error with the Windows Process Activation Service. The process id was '3328'. The data field contains the error number.
Event Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Microsoft-Windows-WAS" Guid="{5 .. 0}" EventSourceName="WAS" />
    <EventID Qualifiers="32768">5011</EventID>
    <Version>0</Version>
    <Level>3</Level>
    <Task>0</Task>
    <Opcode>0</Opcode>
    <Keywords>0x80000000000000</Keywords>
    <TimeCreated SystemTime="2009-09-18T13:58:31.000Z" />
    <EventRecordID>23552</EventRecordID>
    <Correlation />
    <Execution ProcessID="0" ThreadID="0" />
    <Channel>System</Channel>
    <Computer>computername</Computer>
    <Security />
  </System>
  <EventData>
    <Data Name="AppPoolID">Classic .NET AppPool</Data>
    <Data Name="ProcessID">3328</Data>
    <Binary>6D000780</Binary>
  </EventData>
</Event>

这导致:

应用程序池“Classic .NET AppPool”由于服务该应用程序池的进程出现一系列故障而被自动禁用。

以下是该事件的完整详细信息:

Log Name:      System
Source:        Microsoft-Windows-WAS
Date:          18/09/2009 15:03:05
Event ID:      5002
Task Category: None
Level:         Error
Keywords:      Classic
User:          N/A
Computer:      computername
Description:
Application pool 'Classic .NET AppPool' is being automatically disabled due to a series of failures in the process(es) serving that application pool.
Event Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Microsoft-Windows-WAS" Guid="{5 .. 0}" EventSourceName="WAS" />
    <EventID Qualifiers="49152">5002</EventID>
    <Version>0</Version>
    <Level>2</Level>
    <Task>0</Task>
    <Opcode>0</Opcode>
    <Keywords>0x80000000000000</Keywords>
    <TimeCreated SystemTime="2009-09-18T14:03:05.000Z" />
    <EventRecordID>23557</EventRecordID>
    <Correlation />
    <Execution ProcessID="0" ThreadID="0" />
    <Channel>System</Channel>
    <Computer>computername</Computer>
    <Security />
  </System>
  <EventData>
    <Data Name="AppPoolID">Classic .NET AppPool</Data>
    <Binary>
    </Binary>
  </EventData>
</Event>

出现错误:HTTP Error 503. 服务不可用。

请问有人能帮我确定是什么原因导致了这个错误,并告诉我怎样预防它在将来再次发生吗?


你正在运行32位还是64位的Windows 2008操作系统? - Kev
将IIS设置为将错误发送到浏览器:https://dev59.com/gXM_5IYBdhLWcg3wQQzw#1455041 - lsalamon
6个回答

17

这是一个相当严重的问题。我建议获取IIS调试诊断工具。你可以通过在应用程序池的属性中关闭“快速失败保护”来减轻症状,但这只会掩盖问题。问题出在你的应用程序遇到异常,导致服务频繁关闭。你需要运行诊断工具来捕捉进出的所有内容,以找到发生的异常。

这可能是一项非常繁琐的任务,因为该工具将收集各种废数据以供筛选。如果你幸运的话,关闭“快速失败保护”可能会允许异常传递到浏览器,但我猜测服务器最终会挂起。


8
如果您正在使用NServiceBus,请确保应用程序池运行的任何帐户都有权限从消息队列中读取。NServiceBus在应用程序启动时运行后台任务,如果无法从队列中读取,则在10秒后超时,导致w3wp进程被终止。在n(默认为5)个w3wp崩溃后,Rapid-Fail Protection会启动并停止应用程序池。

http://blog.jonathanoliver.com/2010/11/nservicebus-w3wp-exe-processes-crashing/


这正是我遇到的确切问题。谢谢你。 - Joey V.

7

这很可能是由于无限循环引起的。

(我之前也遇到过同样的问题。)因此,您需要查找代码中使用循环的地方,并查看是否删除其中一个可以停止错误。一旦找到罪魁祸首,那么您可以尝试找出导致其无限循环的原因。


2

我刚刚找到并解决了同样的问题。可能会导致这个问题的两个原因:

  • 一个Server.Transfer()循环
  • 在某些情况下调用CurrentThread.Abort()。。(例如在Server.Transfer()之后!)

解决这些问题就是我们解决它的方法。


0

我遇到了这个问题,事件查看器显示“模块DLL C:\Windows\system32\RpcProxy\RpcProxy.dll无法加载。数据是错误。” 这篇文章提供了纠正此问题的步骤:http://forums.iis.net/t/1154189.aspx


0

我在IIS-10 / Windows Server上遇到了同样的问题。 应用程序在开发环境中运行良好,但在生产服务器上出现错误。 我认为问题可能与一些内存/堆栈管理有关。 发布发布版本而不是调试版本解决了该问题。 更详细的是:“高级构建设置”/“调试信息”/“完整” ->“仅pdb”。

更新:第二天,我不小心再次发布了调试版本。现在运行的软件产生了稍微不同的行为。现在的解决方案是禁用“检查算术溢出/下溢”(生成->高级)(VS2013)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接